隐藏具有相同“角色”的用户的数据

时间:2019-08-15 21:13:20

标签: php laravel laravel-5 laravel-5.8

对于角色Former,我有2个用户。例如Eric想查看他的私人信息。他可以看到Jean的私人信息。这是一个问题...

enter image description here

我可以阻止

我尝试过但没有成功:

$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...

2 个答案:

答案 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