Ларавелла и Страж. Концепции, используемые в Sentinel?

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

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

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

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

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

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

Спасибо

2 ответа

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

Например, вы можете заполнить свою базу данных с помощью 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();

Создайте 50 пользователей и назначьте роль 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' => 'jpaniorte@openmailbox.org']);
    \Sentinel::registerAndActivate($yo['attributes']);


    $jperez = User::where('email', 'jpaniorte@openmailbox.org')->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 с помощью специального поставщика аутентификации, вы можете найти его здесь

В любом контроллере

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
}

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

Другие вопросы по тегам