milebits/authorizer

Laravel 6.0及以上版本的权限处理

3.2.18 2022-02-10 14:25 UTC

README

Milebits Authorizer通过一个简单的安装过程,为您提供Laravel应用程序的简化角色/权限管理系统。

如何安装

安装包

composer require milebits/authorizer

添加到模型中

use Illuminate\Database\Eloquent\Model;
use Milebits\Authorizer\Concerns\Authorizer;

class User extends Model{
    use Authorizer;
}

安装权限

当您对应用程序中applicationModels文件夹中现有的实际模型满意时,您可以在命令行中运行artisan authorizer:permInstall命令来为应用程序中每个模型生成权限。

php artisan authorizer:permInstall

注意:此命令应仅使用一次,强烈建议在新鲜迁移之后而不是在迁移之后运行。

好了,您就完成了!现在您可以使用这个包了。

如何使用它

关系

用户角色

$user= App\Models\User::find(1);

$user->roles();

用户权限

$user= App\Models\User::find(1);

$user->permissions();

获取权限

getByClassAction
use App\Models\User;
use Milebits\Authorizer\Models\Permission;

$permissions = Permission::getByClassAction(class: User::class, action: 'viewAny', getCollection: true);

$permissions = Permission::getByClassAction(['class' => User::class, 'action'=> 'viewAny'], getCollection: true);

$permissions = Permission::getByClassAction([User::class, 'viewAny'], getCollection: true);

$permissions = Permission::getByClassAction('App\Models\User.viewAny', getCollection: true);

方法

向用户添加角色

use App\Models\User;use Milebits\Authorizer\Models\Role;
$user = User::find(1);

$role = Role::find(2);
$user->addRole($role);

$role = 'admin';
$user->addRole($role);

在这种情况下,$role应该是要添加的期望角色的ID

从用户中移除角色

use App\Models\User;use Milebits\Authorizer\Models\Role;
$user = User::find(1);

$role = Role::find(2);
$user->removeRole($role);

$role = 'admin';
$user->removeRole($role);

在这种情况下,$role应该是要添加的期望角色的ID

检查用户是否具有某个角色

use App\Models\User;
use Milebits\Authorizer\Models\Role;
$user = User::find(1);

$heHasIt = $user->hasRole('editor');
$heHasIt = $user->hasRole(Role::find(1));
$heHasIt = $user->hasRole(Role::slug('editor')->first());

检查用户是否具有某个权限

use App\Models\User;use Milebits\Authorizer\Models\Permission;
$user = User::find(1);

$canViewAnyUser = $user->hasPermission('App\Models\User.viewAny');

$canViewAnyUser = $user->hasPermission(class: User::class,action: 'viewAny');

$canViewAnyUser = $user->hasPermission([User::class, 'viewAny']);

$canViewAnyUser = $user->hasPermission([
    'class' => User::class,
    'action' => 'viewAny',
]);

// Or you can do it using the hasPermissions instead of hasPermission
$canViewOrUpdateUser = $user->hasPermissions([1, 2, 3]);

$canViewOrUpdateUser = $user->hasPermissions([
    ...Permission::getByClassAction(action: 'view', pluck: 'id'),
    ...Permission::getByClassAction(action: 'update', pluck: 'id'),
]);

使用中间件

HasPermission中间件

use Milebits\Authorizer\Http\Middleware\HasPermission;
$this->middleware(HasPermission::class.':permission_slug_or_id');

HasRole中间件

use Milebits\Authorizer\Http\Middleware\HasRole;
$this->middleware(HasRole::class.':role_slug_or_id');

贡献

如果在使用此包的过程中,您希望请求新的功能,请通过suggestions@os.milebits.com联系我们,并提及您愿意贡献的包或建议的新功能。

漏洞

如果在使用此包的过程中,您遇到安全问题或安全漏洞,请尽快在此GitHub问题中报告,或通过发送电子邮件至security@os.milebits.com并提及主题漏洞报告 milebits/authorizer