对于角色Former
,我有2个用户。例如Eric
想查看他的私人信息。他可以看到Jean
的私人信息。这是一个问题...
我可以阻止
我尝试过但没有成功:
$has_role = auth()->user()->hasRole('former');
$user = User::when($has_role, function ($query) {
return $query->where('email', auth()->user()->email);
})
->get();
我的文件index.blade.php
@foreach($formers as $former)
<tr>
<td> {{$former->name}}</td>
<td> {{$former->firstname}}</td>
etc...
答案 0 :(得分:1)
如果只想向当前用户显示他的信息,而又不让他看到其他用户的信息,则可以在刀片文件中执行此操作,而不必返回数据库或首先通过集合发送如果页面正在通过您的Auth
中间件。通过不从控制器发送用户集合,您将无法向当前用户显示任何其他用户的信息(从而阻止他查看自己数据以外的任何信息)。
在刀片服务器页面上,仅显示单个用户的信息,然后仅显示他具有允许他查看该信息的角色(我猜此演示中的角色称为former
)。借助中间件,您已经在刀片页面上有了用户对象,并且可以访问hasRole()
方法:
@if (\Auth::user()->hasRole('former'))
<td>
\Auth::user()->name;
</td>
<td>
\Auth::user()->address; // etc
</td>
@endif
如果要显示其他用户(我认为您没有,这就是问题所在),则需要从控制器中提取一组用户,然后执行相同的if-check来查看是否当前用户有权查看其他用户的信息。
答案 1 :(得分:0)
用户登录时在会话中存储角色
并在您的Blade中像这样使用
@if(Session::get('role') == 'admin')
<h1> you are admin </h1>
@else
<h1> you are not admin </h1>
@endif