Использование часового в Ларавеле

Я просмотрел документацию и, похоже, не могу найти много о том, что мне нужно сделать. Я установил этот пакет Кентавр

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

<li class="{{ Request::is('clients*') ? 'active' : '' }}"><a href="{{ route('clients.index') }}">Clients</a></li>

Глядя на Контроллер пользователей и ролей, я предположил, что мне нужен конструктор в моем ClientsController, который заявляет права доступа. Это то, что у меня есть

public function __construct(AuthManager $authManager)
{
    // Middleware
    $this->middleware('sentinel.auth');
    $this->middleware('sentinel.access:users.view', ['only' => ['index', 'show']]);
    $this->middleware('sentinel.role:administrator');

    // Dependency Injection
    $this->roleRepository = app()->make('sentinel.roles');
    $this->authManager = $authManager;
}

Я пытаюсь добиться того, чтобы пользователи могли только просматривать клиентов, а администраторы могли их обновлять. В моих представлениях редактирования ролей я добавил флажки

<div class="checkbox">
    <label>
        <input type="checkbox" name="permissions[clients.update]" value="1" {{ $role->hasAccess('clients.update') ? 'checked' : '' }}>
        clients.update
    </label>
</div>
<div class="checkbox">
    <label>
        <input type="checkbox" name="permissions[clients.view]" value="1" {{ $role->hasAccess('clients.view') ? 'checked' : '' }}>
        clients.view
    </label>
</div>

При существующем состоянии администратор может просматривать и обновлять клиентов. Однако, когда я вхожу в систему как обычный пользователь, когда я нажимаю на ссылку для клиентов, я вижу

 Error: You do not have permission to do that. 

Итак, при создании новых моделей с помощью Sentinel, каков процесс предоставления пользователям / ролям разрешений для определенных действий?

Спасибо

1 ответ

Сначала создайте роль, затем прикрепите ее к пользователю.

Итак, быстрый пример из приведенных ссылок:

$role = Sentinel::getRoleRepository()->createModel()->create([
    'name' => 'Subscribers',
    'slug' => 'subscribers',
]);

$user = Sentinel::findById(1);

// use this for lookup where you don't already have a role handy
$role = Sentinel::findRoleByName('Subscribers');

$role->users()->attach($user);

В вашем случае, вероятно, что-то вроде следующих прав доступа:

$role->permissions = [
    "admin.view"   => true,
    "admin.update" => true
    "user.view"    => true,
    "user.update"  => false
];
$role->save();

Затем проверка прав доступа и типа пользователя за один раз... Это будет пример того, как пользователь Admin пытается обновить

if (Sentinel::inRole('admin') and $user->hasAccess(['admin.update']) {
    //
}

Я не использовал Sentinel в течение долгого времени, вы можете пропустить inRole проверьте полностью, не уверен.

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