Ларавель 5 и Сентинел 2

Я полностью начинаю использовать laravel 5.1. Я был разработчиком PHP от 3 до 4 лет, и между тем я всегда работал с Java EE, и я только что вернулся в среду PHP и нашел полный новый список фреймворков.

После небольшого исследования и использования результатов некоторых опросов я обнаружил, что Laravel — лучший вариант. Теперь я использовал Laragon, чтобы успешно установить его и запустить свое первое свежее приложение. Я немного узнаю о том, как работает маршрут, и это нормально.

Теперь мне нужно использовать Sentinel 2.0, чтобы применить правильные роли/аутентификацию к моему приложению, а затем добавить часть для общения.

Итак, чтобы сделать это, мне нужно знать несколько вещей:

  • Есть ли способ «полностью» избавиться от компонента Auth, кроме удаления папки Auth контроллера и маршрута в route.php?
  • Есть ли какой-нибудь учебник (как я не могу найти), рассказывающий, как ДЕЙСТВИТЕЛЬНО включить дозорные средства, как создать простое представление со всем, что ему нужно (контроллер, вары, маршруты....)

Спасибо


person Unknown    schedule 17.10.2015    source источник


Ответы (1)


Да, ты можешь. Например, это мой код для отдыха API с JWT и Sentinel. Вы можете заполнить базу данных с помощью 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' => '[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) и Sentinel

 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
}
person José Pérez Aniorte    schedule 03.08.2016