Laravel-ACL 权限相关操作

2017-01-04  本文已影响45人  伍源辉

创建权限

$permission = new Permission();
$permUser = $permission->create([ 
    'name'        => 'user',
    'slug'        => [          // 传入权限数组
        'create'     => true,
        'view'       => true,
        'update'     => true,
        'delete'     => true,
        'view.phone' => true
    ],
    'description' => 'manage user permissions'
]);

$permission = new Permission();
$permPost = $permission->create([ 
    'name'        => 'post',
    'slug'        => [          // 传入权限数组
        'create'     => true,
        'view'       => true,
        'update'     => true,
        'delete'     => true,
    ],
    'description' => 'manage post permissions'
]);

给角色分配权限

提醒: 你可以传入对象、数组、permission->id 或者只传入 name。

$roleAdmin = Role::first(); // administrator
// 传入对象
$roleAdmin->assignPermission($permUser);
// 传入 id
$roleAdmin->assignPermission($permUser->id);
// 传入 name
$roleAdmin->assignPermission('user');
// 传入集合
$roleAdmin->assignPermission(Permission::all());

一次传入多个权限:

// 数组形式的多个权限
$roleAdmin->assignPermission(array($permUser, $permPost->id));
// 以逗号分隔的多个角色 slugs
$roleAdmin->assignPermission('user, post');

提醒: 如果权限不存在,系统会抛出异常。

为角色移除权限

提醒: 你可以传入对象、数组、permission->id 或者只传入 name。

$roleAdmin = Role::first(); // administrator
// 传入对象
$roleAdmin->revokePermission($permUser);
// 传入 id
$roleAdmin->revokePermission($permUser->id);
// 传入 name
$roleAdmin->revokePermission('user');
// 传入集合
$roleAdmin->revokePermission(Permission::all());

一次传入多个权限:

// 数组形式的多个权限
$roleAdmin->assignPermission(array($permUser, $permPost->id));
// 以逗号分隔的多个角色 slugs
$roleAdmin->assignPermission('user, post');

提醒: 如果权限不存在,系统会抛出异常。

同步角色权限

你可以传入权限对象数组、ids 或者 slugs 来同步权限给角色(参数中新的权限会插入到中间表,参数中没有的权限会从中间表移除)。

$roleAdmin->syncPermissions([1,2,3]);
$roleAdmin->syncPermissions('user, post');
$roleAdmin->syncPermissions((array($permUser, $permPost));
// 传入集合
$roleAdmin->syncPermissions(Permission::all());

提醒: 如果权限不存在,系统会抛出异常。

撤销角色的所有权限

$roleAdmin->revokeAllPermissions();

获取角色的所有权限

$roleAdmin->getPermissions();
上一篇下一篇

猜你喜欢

热点阅读