eneadm/ladder

Laravel 的轻量级权限管理。

v1.2.3 2024-03-18 10:49 UTC

This package is auto-updated.

Last update: 2024-09-03 01:17:32 UTC


README

Build Status Total Downloads Latest Stable Version License

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 许可证 的条款分发。