rs/laravel-doorman

门卫会让你进去吗?只有当你有正确的权限集时。

v2.1 2024-04-16 16:12 UTC

This package is auto-updated.

Last update: 2024-09-16 17:04:22 UTC


README

此包提供了一些特性,可以快速在laravel项目中搭建基于角色的权限。

一旦安装,我们可以做以下操作

// Give a permission to a role
$role->givePermissionTo('view users');

// Assign a user to a role
$user->assignRole($role);

// Check if a user has permission to
$user->can('view users');

权限已在Laravel的gate中注册,因此可以使用任何Laravel gate方法进行检查。

安装

composer require rs/laravel-doorman

服务提供程序将自动注册。

可以使用artisan命令发布配置文件。

php artisan vendor:publish --tag="doorman-config"

配置

配置允许你指定要用于角色和权限的模型。默认情况下,它们使用包中定义的模型。如果需要额外功能或想使用自己的模型,则可以在此处更新。

迁移

php artisan migrate

这将运行默认的迁移。如果你想要更改默认迁移,可以发布迁移文件。

php artisan vendor:publish --tag="doorman-migrations"

如果你不希望运行任何迁移,可以在配置文件中禁用迁移。

基本用法

用户

HasPermissionsViaRoles特性添加到User模型中。

    use Illuminate\Foundation\Auth\User as Authenticatable;
    use Redsnapper\LaravelDoorman\Models\Traits\HasPermissionsViaRoles;
    
    class User extends Authenticatable
    {
        use HasPermissionsViaRoles;
    
        // ...
    }

可以给任何用户分配角色

$user->assignRole('writer');

// You can also assign multiple roles at once
$user->assignRole('editor', 'admin');
// or as an array
$user->assignRole(['editor', 'admin']);

可以从用户中移除角色

$user->removeRole('editor');

角色也可以同步

// All current roles will be removed from the user and replaced by the array given
$user->syncRoles(['editor', 'admin']);

你可以确定一个用户是否具有某个角色

$user->hasRole($role);

可以使用HasPermissionsViaRoles特性从用户中访问权限和角色。

// permissions relaitionship
$permissions = $user->permissions;
// roles relationship
$roles = $user->roles

你可以检查一个用户是否有权限

$user->hasPermissionTo('edit users'); // Name of permission
$user->hasPermissionTo($somePermission->id); // Id of permission
$user->hasPermissionTo($somePermission); // Permission Model

权限和角色

可以使用以下方法之一将权限分配给角色

$role->givePermissionTo($permission);
$permission->assignRole($role);

可以使用以下方法之一将多个权限同步到角色

$role->syncPermissions($permissions);
$permission->syncRoles($roles);

可以使用以下方法之一从角色中移除权限

$role->revokePermissionTo($permission);
$permission->removeRole($role);

权限和角色定制

如果你想设置自己的权限和角色模型,可以更新配置以使用自己的模型。

现有的门卫模型可以扩展,或者模型可以使用现有的特性。

在实现自己的模型时,模型必须满足RolePermission合约。

一个角色模型的示例。

namespace App;

use Illuminate\Database\Eloquent\Model;
use Redsnapper\LaravelDoorman\Models\Contracts\Role as RoleContract;
use Redsnapper\LaravelDoorman\Models\Traits\HasPermissions;

class Role extends Model implements RoleContract
{
    use HasPermissions;

}

一个权限模型的示例。

namespace App;

use Illuminate\Database\Eloquent\Model;
use Redsnapper\LaravelDoorman\Models\Contracts\Permission as PermissionContract;
use Redsnapper\LaravelDoorman\Models\Traits\HasRoles;
use Redsnapper\LaravelDoorman\Models\Traits\PermissionIsFindable;

class Permission extends Model implements PermissionContract
{
    use HasRoles, PermissionIsFindable;

}