2015-10-17 67 views
0

我是一个使用laravel 5.1的完整启动器。我是一个3到4年的PHP开发人员,在那些我一直在使用Java EE的人中间,我刚回到PHP环境,发现了一个全新的框架列表。Laravel 5和Sentinel 2

经过一番研究,并使用一些调查结果,我发现Laravel是最终的一个。现在我使用Laragon成功安装并运行我的第一个新应用程序。我对一条路线如何运作有所了解,这没关系。

现在我需要使用Sentinel 2.0以将正确的角色/认证应用于我的应用程序,然后添加社交化部分。

因此,要做到这一点,我需要知道的几件事情:

  • 有什么办法来“彻底”摆脱验证组件的拆卸控制器验证文件夹和routes.php文件的路径旁?
  • 是否有任何教程(因为我无法找到),告诉如何真正包括定点机构如何建立与所有一个简单的观点,它需要什么(控制器,乏,路线....)

谢谢

回答

0

是的,你可以。例如,这是我用JWT和Sentinel API休息的代码。您可以使用Sentinel种子数据库:

创建角色

例EXA角色

$role = \Sentinel::getRoleRepository()->createModel()->create([ 
     'name' => 'Example', 
     'slug' => 'EXA', 
    ]); 
    $role->permissions = [ 
     'servicio_dash' => true, 
     'servicio_widget' => true, 
    ]; 
    $role->save(); 

用户角色USR

$role = \Sentinel::getRoleRepository()->createModel()->create([ 
     'name' => 'User', 
     'slug' => 'USR', 
    ]); 
    $role->permissions = [ 
     'servicio_dash' => true, 
     'servicio_widget' =>false, 
    ]; 
    $role->save(); 

创建50users和asignate EXA角色(使用摊贩)

$usr_role = \Sentinel::findRoleBySlug('EXA'); 

    factory(App\User::class, 50)->make()->each(function ($u) use ($usr_role) { 
     \Sentinel::registerAndActivate($u['attributes']); 
    }); 

奖金轨道:工厂例如

$factory->define(App\User::class, function (Faker\Generator $faker) { 
return [ 
    'email' => $faker->safeEmail, 
    'password' => 'p4ssw0rd', 
    'first_name' => $faker->firstName, 
    'last_name' => $faker->lastName, 
    'recycle' => false, 
    'phone' => $faker->phoneNumber, 
    'alt_email' => $faker->email 
]; 

});

只有一个用户

$yo = factory(App\User::class)->make(['email' => '[email protected]']); 
    \Sentinel::registerAndActivate($yo['attributes']); 


    $jperez = User::where('email', '[email protected]')->firstOrFail(); 
    $epa_role->users()->attach($jperez); 

身份验证控制器API REST

public function authenticateCredentials(Request $request) 
{ 
    $credentials = $request->only('email', 'password'); 

    $user = \Sentinel::authenticate($credentials); 
    return response()->json($user); 
} 

验证使用令牌(使用JWT)和定点

public function authenticate(Request $request) 
{ 

    // grab credentials from the request 
    $credentials = $request->only('email', 'password'); 
    try { 
     // attempt to verify the credentials and create a token for the user 
     if (!$token = JWTAuth::attempt($credentials)) { 
     return response()->json(['error' => 'invalid_credentials'], 401); 
    } 
    } catch (JWTException $e) { 
     // something went wrong whilst attempting to encode the token 
     return response()->json(['error' => 'could_not_create_token'], 500); 
    } 
    // all good so return the token 
    return response()->json(compact('token')); 
} 

注:对于这一点,你需要配置自定义验证提供商JWT选项,你可以找到这个here

在任何控制器

public function hasPermission($type) 
{ 
    //$sentinel = \Sentinel::findById(\JWTAuth::parseToken()->authenticate()->id); //->this is for a token 

    $sentinel = \Sentinel::findById(1); //if you now the id 


    if($sentinel->hasAccess([$type])) 
     return response()->json(true, 200); 
    //yout custom handle for noAccess here 
}