rs / laravel-doorman
门卫会让你进去吗?只有当你有正确的权限集时。
v2.1
2024-04-16 16:12 UTC
Requires
- php: ^8.0
Requires (Dev)
- mockery/mockery: ^1.0
- orchestra/testbench: ^8.0
- phpunit/phpunit: ^10.0
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);
权限和角色定制
如果你想设置自己的权限和角色模型,可以更新配置以使用自己的模型。
现有的门卫模型可以扩展,或者模型可以使用现有的特性。
在实现自己的模型时,模型必须满足Role
和Permission
合约。
一个角色模型的示例。
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; }