Использование часового в Ларавеле
Я просмотрел документацию и, похоже, не могу найти много о том, что мне нужно сделать. Я установил этот пакет Кентавр
Из того, что я понимаю, это по сути расширение 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
проверьте полностью, не уверен.