2015-07-11 91 views
0

我在Laravel 5.1中使用Entrust。從他們的API,我可以看到,我可以檢查用戶權限是這樣的: $user->can('edit_posts'), 但是,我希望能夠檢查權限這樣一個特定的角色: $role->can('edit_posts'), 返回委託 - 根據角色獲取權限

以上does not工作。這不可能嗎?什麼是正確的方法來檢查角色說manager是否有權利edit_post

回答

1

這就是我現在所做的,雖然我不確定它是否遵循正確的傳統方法,但它的工作原理。

我所做的就是創建Role()模型內部的靜態功能檢查role_idpermission和返回true或false。下面是代碼:

$hasPermission = Role::hasPermission($roleId, 'edit_post'); 
:在控制器

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; 
     } 
} 

用法