Как назначить гостю роль и права

В настоящее время я пытаюсь назначить любому гостю роль "Гость", чтобы у него были разрешения. У меня в настоящее время есть следующий код, который является частью некоторого промежуточного программного обеспечения, это, кажется, неправильное место, чтобы иметь это, я предположил бы, что есть намного лучшее место, я попытался использовать поставщика услуг, однако я не мог присоединить группа

 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);
                }
            }
        }
    }

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

2 ответа

Просто используйте сеансы в этом случае

  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 поставщик.

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