В настоящее время я пытаюсь назначить любому гостю роль «Гость», чтобы у него были разрешения. В настоящее время у меня есть следующий код, который является частью некоторого промежуточного программного обеспечения, это, кажется, неправильное место, чтобы иметь его, я предположил бы, что есть намного лучшее место, я попытался использовать поставщика услуг, однако я не мог присоединить группа
if($this->auth->guest())
{
$user = new User();
$user->username = 'Guest';
$role = Role::where('name', '=', 'guest')
->with('perms')
->first();$user->perms = new Collection();
$user->perms->add($role);
$perms = explode('|', $permissions);
foreach($user->perms as $p) {
foreach($p->perms as $pp) {
foreach($perms as $perm) {
if($perm === $pp->name)
return $next($request);
}
}
}
}
Как вы можете видеть, это очень специфично для промежуточного программного обеспечения. В идеале я хочу атаковать роль при первой возможности, чтобы ее можно было использовать в любой части приложения.
просто используйте сеансы в этом случае
session::put('role',$role);
и в представлении
@if(Session::has('role') == 'whatever')
// show this content
то же самое касается разрешений
добавить массив пермиса в сессию, затем использовать in_array
Я думаю, что это правильно, но помните, что вы выполняете эту проверку при каждом запросе, это выглядит тяжело. Так почему бы не использовать сессию или кеш?
Используя сессию:
if($this->auth->guest()){
$userPerms = [];
if (\Session::has('permissions')){
$userPerms = \Session::get('permissions');
}
else{
$user = new User();
$user->username = 'Guest';
// the rest of your code here...
$userPerms = $user->perms;
// update the session the first time
\Session::put('permissions', userPerms)
}
// comparison here
}
Вы можете применить ту же логику, используя Cache
поставщик.