eneadm / ladder
Laravel 的轻量级权限管理。
v1.2.3
2024-03-18 10:49 UTC
Requires
- php: ^8.1
- ext-json: *
- laravel/framework: ^10.0|^11.0
Requires (Dev)
- mockery/mockery: ^1.0
- orchestra/testbench: ^8.0|^9.0
- phpunit/phpunit: ^9.0|^10.5|^11.0
README
Ladder 🪜
Ladder 通过避免在数据库中存储所有内容,简化了 Laravel 项目的角色和权限管理。受到 Laravel Jetstream 的启发,它提供了一个静态方法,减少查询并确保不可变性,以便于修改。
安装
此包需要 Laravel 10 或更高版本。
composer require eneadm/ladder
安装 Ladder 后,创建一个新的 LadderServiceProvider 来管理角色和权限。您可以使用以下命令轻松完成此操作
php artisan ladder:install
最后,执行 migration
命令以创建一个单键 user_role
表,并将角色分配给用户。
php artisan migrate
使用
在使用 Ladder 之前,请将 HasRoles
特性添加到您的 App\Models\User
模型中。这样做将为角色和权限管理提供必要的方法。
use Ladder\HasRoles; class User extends Authenticatable { use HasRoles; }
HasRoles
特性详情
// Access all of user's roles... $user->roles : Illuminate\Database\Eloquent\Collection // Determine if the user has the given role... $user->hasRole($role) : bool // Access all permissions for a given role belonging to the user... $user->rolePermissions($role) : array // Access all permissions belonging to the user... $user->permissions() : Illuminate\Support\Collection // Determine if the user role has a given permission... $user->hasRolePermission($role, $permission) : bool // Determine if the user has a given permission... $user->hasPermission($permission) : bool
所有方法参数都可以接受字符串、数组、集合或枚举(如果需要)。为了获得最佳性能,建议在处理多个条目时使用数组或集合作为参数。
角色 & 权限
用户可以使用 Ladder::role
方法通过 App\Providers\LadderServiceProvider
中的权限定义接收角色。这包括指定角色的 slug、名称、权限和描述。例如,在一个博客应用中,角色定义可能是
Ladder::role('admin', 'Administrator', [ 'post:read', 'post:create', 'post:update', 'post:delete', ])->description('Administrator users can perform any action.'); Ladder::role('editor', 'Editor', [ 'post:read', 'post:create', 'post:update', ])->description('Editor users have the ability to read, create, and update posts.');
分配角色
您可以使用 Ladder\HasRoles
特性提供的 roles
关系将角色分配给用户
use App\Models\User; $user = User::find(1); $user->roles()->updateOrCreate(['role' => 'admin']);
授权
对于请求授权,使用 Ladder\HasRoles
特性的 hasPermission
方法来检查用户的角色权限。通常,验证细粒度权限比角色更重要。角色将权限分组,主要用于展示。在授权策略中使用 hasPermission
方法。
/** * Determine whether the user can update a post. */ public function update(User $user, Post $post): bool { return $user->hasPermission('post:update'); }
许可证
Ladder 是免费软件,根据 MIT 许可证 的条款分发。