在我的控制器中,我获得了一个角色列表及其相关权限。此外,我获得了所有权限的列表。
$roles = Role::with('perms')->get();
$permissions = Permission::all();
所以现在当我将其传递给我的视图时,我现在拥有一个具有权限的角色列表,以及所有可能权限的列表。
在我看来,我目前正在做这样的事情
@foreach($roles as $role)
<tr>
<td>
{{ $role->display_name or '' }}
</td>
<td>
<ul class="list-group">
@foreach($role->perms as $permission)
<li class="list-group-item">
{{ $permission->display_name }}
</li>
@endforeach
</ul>
</td>
</tr>
@endforeach
所以我基本上用他们的权限显示所有角色。现在,在每个循环中,我试图添加类似下面的内容
<li class="list-group-item">
<select name="add-permission-select" class="form-control"></select>
</li>
上面的选择应显示角色可以拥有的所有剩余权限。所以我基本上需要查看角色拥有的所有权限,然后在我的$ permissions列表中交叉检查。所以我要说我有
PermissionA
PermissionB
PermissionC
第一个角色只有PermissionA,此角色的选择选项应显示PermissionB和PermissionC。
我将如何交叉比较这两件事?
由于
答案 0 :(得分:1)
您最好的选择可能是使用收集过滤器。
使用Available Collection Methods,您可以在每个角色/权限对象上运行diff()
,过滤掉您不需要的内容。请参阅Diff和DiffKeys方法。
示例:
$collection = collect([1, 2, 3, 4, 5]);
$diff = $collection->diff([2, 4, 6, 8]);
$diff->all();
// [1, 3, 5]