Entrust - 基于角色获取权限
Entrust - Get Permission Based on Role
我在 Laravel 5.1 中使用 Entrust。从他们的api,我可以看到我可以这样检查用户权限:
$user->can('edit_posts'),
但是,我希望能够像这样检查特定角色的权限:
$role->can('edit_posts'),
returns True 或 False
以上方法无效。那不可能吗?检查角色 manager
是否有权 edit_post
的正确方法是什么?
这就是我现在所做的,虽然我不确定它是否是正确的传统方法,但它确实有效。
我所做的是在 Role()
模型中创建了一个静态函数,用于检查 role_id
与 permission
和 returns 的真假。这是代码:
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;
}
}
控制器中的用法:
$hasPermission = Role::hasPermission($roleId, 'edit_post');
我在 Laravel 5.1 中使用 Entrust。从他们的api,我可以看到我可以这样检查用户权限:
$user->can('edit_posts'),
但是,我希望能够像这样检查特定角色的权限:
$role->can('edit_posts'),
returns True 或 False
以上方法无效。那不可能吗?检查角色 manager
是否有权 edit_post
的正确方法是什么?
这就是我现在所做的,虽然我不确定它是否是正确的传统方法,但它确实有效。
我所做的是在 Role()
模型中创建了一个静态函数,用于检查 role_id
与 permission
和 returns 的真假。这是代码:
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;
}
}
控制器中的用法:
$hasPermission = Role::hasPermission($roleId, 'edit_post');