因此,我想显示特定角色所具有的所有权限。我写了这样的代码:
公共函数index(){$role=role::first();$binding=$role->perms->toArray();dd($binding);//返回视图('binding.index',compact('binding'));}因此,基本上dd给出:
数组:1[▼0=>数组:7[▼"id"=>1"name"=>"创建新闻"display_name"=>"创建新闻"description"=>"/news/{news}/create"created_at"=>"2015-02-21 12:29:28"updated_at"=>"2015-02-21 12:30:21"pivot"=>数组:2[▶]]]这是::first()(一个角色)的结果。所以,总而言之,$binding是一个角色数组,每个角色都是一个权限数组。如何从这样的变量中传递和提取数据?所需的示例结果:角色:用户权限:查看新闻;角色:管理员权限:创建新闻,编辑新闻。
或者它只是两个嵌套的foreach循环?
此外,我注意到对于Role::all();我得到错误未定义的属性:Illuminate''Database''Eloquent''Collection::$perms。为什么,我没有得到角色::first();的错误;?
您可以加载所有角色(也已经渴望加载保存数据库查询的权限):
$roles = Role::with('perms')->get();
然后将其传递给您的视图:
return view('binding.index', compact('roles'));
然后在那里循环:
@foreach($roles as $role)
@foreach($role->perms as $permission)
{{ $permission->someproperty }}
@endforeach
@endforeach
当然,如果你想把它作为一个数组,你也可以直接调用$roles->toArray()
。权限将嵌套在每个角色中。
有关热切加载的更多信息
在laravel 5.3 中检索分配给角色的权限的不同方法
解决方案1:
Role::where('name', $roleParam)->first()->perms;
注意:权限名称可以是存在于权限表中的任何名称,如下面的
$roleParam="添加用户";
解决方案2:
$roleObj = Role::where('name', $roleParam)->first();
return $this->response->array($roleObj->perms);
此解决方案可与Dingo路由器帮助程序配合使用:-)因此,您必须在基本控制器中使用帮助程序,如下所述。
use Dingo'Api'Routing'Helpers;
class Controller extends BaseController
{
use AuthorizesRequests, DispatchesJobs, ValidatesRequests, Helpers;
}