metrixinfo/laravel-permissions

细粒度用户、组和角色权限

v0.2.1 2021-06-22 15:03 UTC

This package is auto-updated.

Last update: 2024-09-22 22:44:34 UTC


README

Latest Version on Packagist Total Downloads

Laravel Permissions 允许您创建细粒度权限并将其分配给用户和角色。

您可以为用户分配零个或多个角色,它们将继承分配给这些角色的权限。您还可以将特定权限分配给特定用户。

用户的权限被缓存以提高性能。

要求

  • PHP 7.4|8.0
  • Laravel 7.x|8.x

安装

您可以通过 composer 安装此包

composer require metrixinfo/laravel-permissions

通过运行以下 artisan 命令发布配置

php artisan vendor:publish --provider="Metrix\LaravelPermissions\LaravelPermissionsServiceProvider" --tag="permissions"

运行迁移以创建所需的表。

php artisan migrate

迁移将创建以下表

  • permissions
  • roles
  • role_user
  • permission_user
  • permission_role

外键约束被强制执行以保证数据完整性。如果您将在本地环境中刷新数据库,您需要在其 down() 方法中禁用它们。

database/migrations/02014_10_12_000000_create_users_table.php

 /**
  * Reverse the migrations.
  *
  * @return void
  */
 public function down(): void
 {
     Schema::disableForeignKeyConstraints();
     Schema::dropIfExists('users');
     Schema::enableForeignKeyConstraints();
 }

用法

在您的 User 模型中包含以下两个特质。

use \Metrix\LaravelPermissions\Traits\HasPermissions;
use \Metrix\LaravelPermissions\Traits\HasRoles;

权限

权限由您定义的 '区域' 描述。区域的一些例子可以是 'blog.post' 和 'blog.comment'。您需要通过将它们插入权限表来创建应用程序所需的权限。

每个分配的权限可以组合以下 4 个操作之一

  • 读取
  • 写入
  • 编辑
  • 删除

您可以在代码中的任何区域检查权限。一些首选位置是在策略或门方法中。

对于策略,它可能看起来像这样,允许作者和具有“Moderator”角色的某人编辑帖子

/**
 * Determine whether the user can edit a post.
 *
 * @param  \App\Models\User  $user
 * @param  \App\Models\Post  $post
 * 
 * @return bool
 */
public function update(User $user, Post $post):bool
{
    return $user->id === $post->user_id || Acl::hasEdit('posts');
}

或者它可以用来保护站点的私有区域,例如仅允许特定用户看到 Horizon 仪表板。

/**
 * Register the Horizon gate.
 *
 * This gate determines who can access Horizon in non-local environments.
 *
 * @return void
 */
protected function gate()
{
    Gate::define('viewHorizon', function ($user) {
        return Acl::hasRead('horizon');
    });
}

控制台命令

提供了控制台命令来帮助管理您的权限。

您可以刷新所有缓存的权限

php artisan acl:clear

或仅刷新特定用户的权限。

php artisan acl:clear -u 212

您可以使用 acl:permissions artisan 命令来管理权限。

php artisan acl:permissions

您可以使用 acl:roles artisan 命令来管理角色。

php artisan acl:roles

变更日志

请参阅 CHANGELOG 了解最近更改的详细信息。

贡献

请参阅 CONTRIBUTING 了解详细信息。

安全

如果您发现任何安全相关的问题,请使用问题跟踪器。

致谢

此包受到了 Harro Verton (WanWizard) 为 FuelPHP 的 OrmAuth 包 所做工作的启发。

许可

GNU GPLv3。请参阅 许可文件 了解更多信息。