2015-10-17 72 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 
}