haojohnny/permission

将用户与角色和权限关联

0.0.1 2019-06-03 06:46 UTC

This package is auto-updated.

Last update: 2024-09-29 05:21:58 UTC


README

基于thinkphp5框架,将用户与权限、角色相关联的工具

要求

php: >=7.0
topthink/think-migration: ^2.0
thinkphp: >=5.0

安装

$ composer require haojohnny/permission -vvv

准备

$ mkdir -p ./database/migrations

$ cp ./vendor/haojohnny/permission/config/permission.php ./config/
$ cp ./vendor/haojohnny/permission/database/migrations/20190531110604_create_permission_tables.php ./database/migrations/

在permission.php的配置文件中设置表名

'permissions' => 'permissions', # 权限表
'model_has_permissions' => 'model_has_permissions', # 用户权限表
'roles' => 'roles', # 角色表
'model_has_roles' => 'model_has_roles', # 用户角色表
'role_has_permissions' => 'role_has_permissions'  # 角色权限表 

执行数据库迁移

$ php think migrate:create CreatePermissionTables

使用方法

RolesPermissions继承自\think\Model,使用create方法创建对应角色和权限

<?php

use Haojohnny\Permission\Models\Roles;
use Haojohnny\Permission\Models\Permissions;

$role = Roles::create(['name' => 'editor']);
$permission = Permissions::create(['name' => 'edit articles']);

model中的create方法使用的是REPLACE INTO,因此推荐使用findOrCreate

<?php

use Haojohnny\Permission\Models\Roles;
use Haojohnny\Permission\Models\Permissions;

$role = Roles::findOrCreate(['name' => 'editor']);
$permission = Permissions::findOrCreate(['name' => 'permission1']);

在model中使用use HasRoles引入权限管理

<?php

namespace app\index\model;

use think\Model;
use Haojohnny\Permission\Traits\HasRoles;

class User extends Model
{
    use HasRoles;

    // ...
}

给用户添加权限

<?php

$user = User::get(1);
// 添加一个权限
$user->givePermission('permission1');

// 添加多个权限
$user->givePermission('permission1', 'permission2');

// 支持数组
$user->givePermission(['permission1', 'permission2']);
$user->givePermission(['permission1', 'permission2'], ['pemission3', 'permission4']);

// 支持字符串和数组混合
$user->givePermission('permission1', ['permission2', 'permission3']);

撤销用户权限

<?php

$user = User::get(1);
// 撤销一个权限
$user->revokePermission('permission1');

// 也可以像权限管理那样支持字符串和数组及两种混合形式。
$user->revokePermission('permission1', ['permission2', 'permission2']);

为角色分配权限,撤销权限

HasRoles中使用了use HasPermissions,因此可以使用givePermissionrevokePermission方法

<?php
use Haojohnny\Permission\Models\Roles;

$role = Roles::create(['name' => 'editor']);

// 为角色添加权限
$role->givePermission('permission1');
$role->givePermission('permission1', ['permission2', 'permission2']);

// 为角色撤销权限
$role->revokePermission('permission1', ['permission2', 'permission2']);

注意:角色权限和直接权限是相互独立的。

给用户分配角色

<?php

$user = User::get(1);
// 分配一个角色
$user->assignRole('editor');

// 也支持字符串和数组及两种混合形式。
$user->assignRole('editor1',['editor2', 'editor3']);

撤销用户角色

<?php

$user = User::get(1);
// 撤销一个角色
$user->revokeRole('editor');

// 也支持字符串和数组及两种混合形式。
$user->revokeRole('editor1', ['editor2', 'editor3']);

权限判断

<?php

$user = User::get(1);
$user->hasPermission('permission1');

角色判断

<?php
$user = User::get(1);
$user->hasRole('editor1');

待办事项

贡献

你可以通过以下三种方式之一进行贡献

  1. 使用问题跟踪器提交错误报告。
  2. 问题跟踪器上回答问题或修复错误。
  3. 贡献新功能或更新wiki。

代码贡献过程不是非常正式。你只需要确保遵循PSR-0、PSR-1和PSR-2编码指南。任何新的代码贡献都必须伴随适用的单元测试。

许可证

MIT