amir/laravel-permission

一种简单灵活的权限管理方式

v1.4 2022-03-26 14:21 UTC

This package is auto-updated.

Last update: 2024-09-26 19:35:00 UTC


README

一个简单灵活的 Laravel 授权和角色权限管理

为什么我们需要一个 Laravel 权限包

在许多项目中,我们需要为我们的用户实现基于角色的权限管理系统。虽然 Laravel 有最好的工具来管理用户权限,但我构建了这个包,使其更简单、更灵活,并避免在许多基于 Laravel 的 Web 项目中重复工作。

如何使用

想法是尽可能简单和灵活地使用此包。
此包创建了一个包含所有路由的列表,并将这些权限列表分配给用户角色。
尽管 laravel-permission 包做了大部分工作,但你也可以轻松扩展它并实现自己的授权系统。

安装

通过 composer 安装此包。在终端运行此命令

$ composer require amir/laravel-permission

之后,您需要运行迁移文件

$ php artisan migrate

如何授权用户

此包向 users 表添加了 role_id。角色存储在 roles 表中。您可以在管理员面板中或通过创建种子文件将角色分配给用户。
然后,您只需将 auth.role 中间件分配给您的路由。

将路由分配给角色

除了中间件和其他路由设置外,您还可以在您的路由组中使用 role 键来将角色分配给您的路由。
您可以将某个角色的路由放在一个 Route 组中,如下所示

Route::group([
    'middleware' => 'auth.role',
    'prefix' => ...,
    'role' => ['admin', 'customer'],
    ...
],function (){
    ...
    Route::get('/home', 'HomeController@index')->name('home');
    Route::get('/product', 'ProductController@index');
    ...
});

当然,您可以有多个这样的路由组。
然后您需要运行此 artisan 命令来注册所有权限

$ php artisan permissions:generate 

此命令将注册所有权限并将权限分配给角色。
如果您向此命令添加 fresh 选项,它将删除所有数据并生成新的权限数据

$ php artisan permissions:generate --fresh

现在只有具有适当角色的用户才能访问分配给他们的路由。
别忘了,此包不处理将角色分配给用户。您需要在您的管理面板或其他处理用户的任何地方处理此操作。
再次强调,如果您想手动将权限添加到路由,则不需要在您的路由组中添加 `role` 键。您可以在您的管理面板中轻松地将权限分配给角色或为该操作创建另一个种子文件。

如何创建角色

使用 php artisan permissions:generate 命令将生成在路由中定义的所有角色(如果不存在的话)。
此外,您还可以创建一个生成器来填充 roles 表。它只接受一个 name 字段。
您的 RolesSeeser 文件可能如下所示。

Role::firstOrCreate(['name' => 'admin']);
Role::firstOrCreate(['name' => 'customer']);

别忘了在您的生成器中导入 Role 模型。

use Amir\Permission\Models\Role;

如何清除权限

要清除已注册的权限,您可以运行此命令

$ php artisan permissions:clear

您可以使用此命令清除特定角色的所有权限数据

$ php artisan permissions:clear --roles role1 role2

要清除仅权限列表,请使用带有此选项的 permissions:clear 命令

$ php artisan permissions:clear --tables permissions

要清除所有角色

$ php artisan permissions:clear --tables roles

要清除仅权限角色关系

$ php artisan permissions:clear --tables permission_role

此命令将删除分配给角色的所有权限,以便您可以重新生成权限

您还可以组合使用这些选项

$ php artisan permissions:clear --roles admin --tables permission_role

关于

我已经在我的项目中使用这个 Laravel 权限管理方法了一段时间。它使我的 Laravel 权限管理变得简单和灵活。希望它也能帮到您。所有拉取请求都欢迎。
大部分工作基于我的关于Laravel授权和角色权限管理的文章