如何显示角色在laravel 5委托中的所有权限?

How to display all permissions a role has in laravel 5 entrust?

所以,我想显示特定角色拥有的所有权限。我写了这段代码:

    public 函数索引()
    {
    $角色 = Role::first();
    $binding = $role->perms->toArray();
    dd($绑定);
    //return 视图('binding.index', 紧凑('binding'));
    }
    
所以基本上 dd 给出:
    array:1 [▼
      0 => array:7 [▼
        "id" => 1
        "name" => "create-news"
        "display_name" => "Create News"
        "description" => "/news/{news}/create"
        "created_at" => "2015-02-21 12:29:28"
        "updated_at" => "2015-02-21 12:30:21"
        "pivot" => array:2 [▶]
      ]
    ]
    
这是 ::first() (一个角色)的结果。所以,总结一下,$binding就是一个角色数组,每个角色就是一个权限数组。如何从此类变量传递和提取数据? 需要的示例结果: 角色:用户 权限:查看新闻; 角色:管理员 权限:创建新闻、编辑新闻。

还是只有 2 个嵌套的 foreach 循环?

此外,我注意到 Role::all();我收到错误 Undefined 属性: Illuminate\Database\Eloquent\Collection::$perms。怎么会这样,我没有收到 Role::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()。权限将嵌套在每个角色中。


More information about eager loading

在 laravel 5.3

中检索分配给角色的权限的不同方法

方案一:

Role::where('name', $roleParam)->first()->perms;

注意:权限名称可以是权限中存在的任何名称table,如下所示

$roleParam = 'add-user';

方案二:

$roleObj = Role::where('name', $roleParam)->first();

return $this->response->array($roleObj->perms);

此解决方案适用于 Dingo Router Helpers :-) 因此您必须将 Helpers 用于基本控制器,如下所述。

use Dingo\Api\Routing\Helpers;

class Controller extends BaseController
{
    use AuthorizesRequests, DispatchesJobs, ValidatesRequests, Helpers;
}