Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel查找在角色中选择的权限_Php_Laravel - Fatal编程技术网

Php Laravel查找在角色中选择的权限

Php Laravel查找在角色中选择的权限,php,laravel,Php,Laravel,在我的web应用程序中,我有两个表角色和权限,我可以将每个权限与角色表同步 我想找出哪些权限在角色的权限中,因为选择了“然后进入视图”,例如,我有10个权限,其中四个项目与角色表同步,我想找出它们 $role=role::with('permission')->whereId($id)->first(); $permissions=Permission::all(); dd($role,$role->permission()); 输出为: App\Entities\Role {#1816 ▼

在我的web应用程序中,我有两个表
角色
权限
,我可以将每个
权限
角色
表同步

我想找出哪些权限在角色的权限中,因为选择了“然后进入视图”,例如,我有10个权限,其中四个项目与
角色
表同步,我想找出它们

$role=role::with('permission')->whereId($id)->first();
$permissions=Permission::all();
dd($role,$role->permission());
输出为:

App\Entities\Role {#1816 ▼
  ...
  #relations: array:1 [▼
    "permission" => Illuminate\Database\Eloquent\Collection {#1814 ▼
      #items: array:2 [▼
        0 => App\Entities\Permission {#1829 ▼
          ...
          #attributes: array:5 [▼
            "id" => 4
            "name" => "create-comment"
            "label" => "user can create a comment"
            ...
          ]
          ...
        }
        1 => App\Entities\Permission {#1826 ▶}
      ]
    }
  ]
  ...
}

Illuminate\Database\Eloquent\Collection {#1812 ▼
  #items: array:3 [▼
    0 => App\Entities\Permission {#1820 ▼
      ...
      #attributes: array:5 [▼
        "id" => 4
        "name" => "create-comment"
        "label" => "user can create a comment"
        ...
      ]
      ...
    }
    1 => App\Entities\Permission {#1828 ▶}
    2 => App\Entities\Permission {#1827 ▶}
  ]
}
如您所见,“创建评论”权限在角色的权限中,我如何才能找到它们

例如:

$role=role::with('permission')->whereId($id)->first();
$permissions=权限::get();
dd($role->hasPermission($permissions));
类角色扩展模型
{
...
公共函数hasPermission($permission)
{
//返回角色中的权限
}
}
或使用
包含

@foreach($permissions as$permission)
权限->包含('id',$permission->id)selected=“selected”@else'@endif>
{{$permission->name}{{{$permission->label}
@endforeach

刀片中的此代码解决了我的问题:

@foreach($permissions as$permission)
权限->包含('id',$permission->id)selected=“selected”@else'@endif>
{{$permission->name}({{$permission->label})
@endforeach

在您的代码中,
$permissions
是一个集合,而不是单个的
权限
,因此
haspmissions()
与传递
$permissions
不兼容。您可以执行
$permission=permission::where('name','create comment')->first()
,然后您可以通过两种方法查看您的角色是否具有
创建注释
权限,例如
contains()
first(function(){…})
@timleif我应该在数组或集合中搜索该权限,例如:
@if($role->permission->contains('id',$permission->id))
$role->permission
是一个
集合(虽然它应该是
$role->permissions
,但因为有很多,变量命名应该始终表示所包含的内容,
$role->permission
是单数,所以不匹配)是的,这是总的想法。