委托 - 基于角色获取权限

时间:2015-07-11 09:39:14

标签: laravel laravel-5 roles user-permissions

我在Laravel 5.1中使用Entrust。从他们的api,我可以看到我可以像这样检查用户权限: $user->can('edit_posts'), 但是,我希望能够检查特定角色的权限,如下所示: $role->can('edit_posts'), 返回 True False

以上不起作用。这不可能吗?检查某个角色是否manageredit_post权利的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

这就是我现在所做的,虽然我不确定它是否是正确的常规方法,但它有效。

我所做的是在Role()模型中创建了一个静态函数,用role_id检查permission并返回true或false。这是代码:

namespace App\Models;
use Zizaco\Entrust\EntrustRole;
use DB;

class Role extends EntrustRole {   

      /**
        * Checks if the role has a permission by its name.
        *
        * @param numeric $roleId|string $permissionName - Role ID and permission name.
        *
        * @return bool
      */
         public static function hasPermission($roleId, $permissionName)
         {
              $role = Role::findOrFail($roleId);
              $role_permissions = $role->perms()->get();
                   foreach ($role_permissions as $permission) {
                       if ($permission->name == $permissionName) {
                           return true;
                       }
                   }
              return false;
         }
}

Controller中的用法:

$hasPermission = Role::hasPermission($roleId, 'edit_post');