caydeesoft/permission

Laravel 用户权限包

v1.2.8 2023-05-23 09:28 UTC

README

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

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

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

如何使用

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

安装

首先,通过 composer 安装这个包。在您的终端中运行此命令

$ composer require caydeesoft/permission

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

$ php artisan migrate

在用户模型上添加

use Caydeesoft\Traits\HasRoles;
class User extends Authenticatable
{
    use HasRoles;

    

如何授权用户

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

将路由分配给角色

除了中间件和其他路由设置外,您还可以在路由组中使用 `role` 键来为您的路由分配角色。
您可以将为角色指定的路由放在这样的 `Route` 组中

Route::group([
    'middleware' => 'auth.role',
    'prefix' => ...,
    'role' => ['admin', 'customer'],
    'access_level' => ['owner', 'client']
    ...
],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` 字段。
您的 `RolesSeeder` 文件可以像这样。

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

别忘了在您的种子中导入 `Role` 模型。

use Caydeesoft\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

在刀片模板路由上,您现在可以像这样检查路由访问

@canaccess(routename e.g 'home.index')
    <a href="{{ route("home.index") }}">Home</a>
@endcanaccess

在控制器上,您可以像这样检查路由

use Caydeesoft\Permission\Helpers\Helpers;
class HomeController extends Controller
{
    public function index()
        {
           if(Helpers::can_access({routename e.g 'home.index'}))
                {
                    do something;
                } 
            else
                {
                    do other things;
                }    
        }
}

关于

我在项目中使用这种Laravel权限管理方法有一段时间了。它使Laravel权限管理变得对我既简单又灵活。我希望它也能帮到您。所有拉取请求都欢迎。Amir Yousefi包的贡献(点击查看)
大部分工作基于我的关于Laravel授权和角色权限管理的文章