sehrgut/laravel-object-roles

该包已被 弃用 且不再维护。未建议替代包。

Laravel 的角色和权限,其中角色可以针对数据库对象进行管理

v0.1.1 2021-01-07 13:42 UTC

This package is auto-updated.

Last update: 2023-03-07 18:58:20 UTC


README

Laravel 的角色和权限,其中角色可以针对数据库对象进行管理

目录

为什么?

有大量的包可以为 Laravel 应用添加 ACL 功能。然而,现有的解决方案似乎都不允许我们根据对象为用户分配角色。我们经常遇到的情况是需要定义全局角色,如 TECH_ADMIN,同时也需要针对数据库对象,如 Organisation 的角色,例如有 EDITOR 用户,他们只在该特定的 Organisation 上被授予某些权限,而不在其他对象上。

免责声明

该包还处于早期阶段。目前它做了相当多的假设

  1. 用户存储在 users 表中
  2. 安装包和运行迁移时,users 表已存在
  3. users 表有一个主键 id,它是一个无符号整数
  4. 以下表在安装包之前都不存在
    • roles
    • permissions
    • permission_role
    • role_user

入门

1. 安装包

composer require sehrgut/laravel-object-roles

2. 运行数据库迁移

php artisan migrate

3. 在 `User` 模型上使用 HasRolesAndPermissions 特性

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use SehrGut\LaravelObjectRoles\HasRolesAndPermissions;
use SehrGut\LaravelObjectRoles\Models\Permission;

class User extends Model
{
    use HasRolesAndPermissions;
}

文档

创建角色和权限

$permission = SehrGut\LaravelObjectRoles\Models\Permission::create([
    'name' => 'posts.update',
    'description' => 'The ability to update existing Post objects',
]);
$role = SehrGut\LaravelObjectRoles\Models\Role::create([
    'name' => 'EDITOR',
    'description' => 'A User who can manage content',
]);

将权限分配给角色

$role->attachPermission('posts.update');
// or:
$role->attachPermission($permission);

将角色分配给用户

$user->assignGlobalRole('EDITOR');
$user->assignObjectRole('EDITOR', $organisation);

检查权限

$user->hasGlobalPermission('posts.update')
$user->hasPermissionThrough('show_statistics', $organisation)

许可

该项目遵循 MIT 许可