我目前正在尝试为任何访客分配“访客”角色,以便他们可以拥有权限。我目前有以下代码,这是一些中间件的一部分,这似乎是错误的地方拥有它,我会假设有一个更好的地方,我尝试使用服务提供商,但我无法附加组
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);
}
}
}
}
正如您所看到的,这非常特定于中间件,理想情况下我想在第一个可能的实例中攻击该角色,以便它可以在应用程序的任何部分中使用
答案 0 :(得分:0)
在这种情况下只使用会话
session::put('role',$role);
并在视图中
@if(Session::has('role') == 'whatever')
// show this content
同样适用于权限
在会话中添加一组权限,然后使用in_array
答案 1 :(得分:0)
我认为这个地方是对的,但请记住,您正在对每个请求执行此验证,它看起来很重。那么,为什么不使用会话或缓存?
使用会话:
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
提供程序应用相同的逻辑。