2015-09-08 4 views
2

Мне нужен ролевой доступ для моего проекта, и я получил рекомендации, чтобы не изобретать велосипед и использовать Sentinel. Я проверил это, но я немного смущен тем, как это работает. В документации действительно только описано, как ее использовать, а не как это работает.Laravel и Sentinel. Концепции, используемые в Sentinel?

Итак, я понимаю регистрацию, пользователей, дросселирование, роли и разрешения. Однако я не понимаю, что такое стойкость, активация, контрольно-пропускной пункт.

Как создать разрешения и прикрепить их к ролям? Внутри кода приложения? Могу ли я получить таблицу prrmissions, из которой я их извлекаю?

Как связать разрешения с ресурсами? Индивидуально в каждом маршруте добавить промежуточное ПО?

Что делать, если мне нужно несколько промежуточных программ для разных маршрутов?

Я знаю, что у меня есть куча вопросов, но теперь все может помочь. Моя проблема в том, что я не хочу использовать Sentinel, чтобы понять, что он не будет работать должным образом с тем, что мне нужно сделать, а затем начать все с нуля.

Благодаря

ответ

-3

Если вы используете Laravel 5.1 не используют Sentinel. Вместо этого используйте промежуточное программное обеспечение, проверьте документы laravel, его мощный и очень простой.

+0

Я знаю о Laravel промежуточных программном. Мне просто интересно, как работает Страж. Мне понадобится реализация на основе ролей, и Sentinel действительно с ней, но я просто не понимаю, как все это работает. – Cristian

1

На мой взгляд, дозорный вариант - лучший вариант.

Например, вы можете посеять свою базу данных с Стража:

Создать ролям

Пример 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']); 
    }); 

Bonus Track: Фабрика Пример

$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 с настраиваемым поставщиком Auth, вы можете найти этот 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 
} 
Смежные вопросы