roksta / laravel-roles
laravel 的权限和用户角色管理器
Requires
- php: >=5.4.0
This package is auto-updated.
Last update: 2024-09-14 22:43:13 UTC
README
此包提供了一种简单的方法来管理系统上的用户。它列出了应用中定义的所有可用路由,并利用路由名称分别赋予每个用户访问每个路由的权限。这意味着每个用户都需要明确的权限来访问每个路由。该包附带已构建的用户和角色管理视图,因此您只需创建一个新用户,即可立即调整其角色。
安装
composer require roksta/laravel-roles
配置
迁移数据库以创建包所需的表。
php artisan migrate
发布配置文件
php artisan vendor:publish
并选择 Roksta\Permit\PermissionsServiceProvider 提供者。这将创建配置目录中的 permissions.php 文件。
permissions.php
根据注释中的描述设置适当的设置。
- super_admin_user_id 是拥有所有权限并有权设置其他用户权限的用户 ID。这假设系统已经在用户表中有一个用户。
- route_name_prefix 是要保护的路线名称的前缀。您必须使用名称和前缀定义您的路由。
- except 是可能由 route_name_prefix 前缀的路线,例如通过分组,但不应该被保护。
示例
routes/web.php
Route::get('/', 'HomeController@home')->name('home'); Route::group(['as' => 'admin.'], function() { Route::get('profile', 'ProfileController@show')->name('profile.show'); Route::resource('users', 'UsersController'); });
列出路由显示命名路由如下
php artisan route:list +------+---------+----------------+---------------------+--------------------------- |Domain|Method |URI | Name | Action +------+---------+----------------+---------------------+-------------------------- | | GET |/ | home |App\Http\Controlle | | GET |/profile | admin.profile.show |App\Http\Controlle | | GET |/users | admin.users.index |App\Http\Controlle | | GET |/users/create | admin.users.create |App\Http\Controlle | | POST |/users | admin.users.store |App\Http\Controlle | | GET |/users/{id} | admin.users.show |App\Http\Controlle | | GET |/users/{id}/edit| admin.users.edit |App\Http\Controlle | | PUT |/users/{id} | admin.users.update |App\Http\Controlle | | DELETE |/users/{id} | admin.users.destroy |App\Http\Controlle
Config/permissions.php
return [ 'super_admin_user_id' => 1, 'route_name_prefix' => 'admin.', 'route_path_prefix' => 'admin', 'except' => [ 'profile.show', 'users.index', ], 'controller_namespace' => 'App\Http\Controllers\Admin', ];
这意味着
- '/' 没有任何权限保护,因为它不属于 'admin.' 路由名称前缀。
- 以 'admin.' 开头的路由将被保护。希望访问这些路由的用户需要获得权限或遇到 403 错误。
- '/profile' 和 '/users' 将被豁免这些权限,可以自由查看。
- 用户表中 ID 为 1 的用户将获得超级管理员权限,这意味着对所有路由都有权利。
- controller_namespace 定义了 UserPermissionsController 控制器所在的命名空间。
运行
php artisan permissions:install
返回
6 routes protected Admin has been granted super admin permissions
将 php \Roksta\Permit\VerifyPermissions::class 添加到您的 app\Http\Kernel.php 中的 $middlewareGroups 或 $routeMiddleware。
在 controller_namespace 中创建一个名为 UserPermissionsController 的控制器,如下所示
namespace App\Http\Controllers\Admin; use App\Http\Controllers\Controller; use Roksta\Permit\UserPermissions; class UserPermissionsController extends Controller { use UserPermissions; }
在 controller_namespace 中创建一个名为 RolePermissionsController 的控制器,如下所示
namespace App\Http\Controllers\Admin; use App\Http\Controllers\Controller; use Roksta\Permit\RolePermissions; class UserPermissionsController extends Controller { use RolePermissions; }
上述控制器是资源控制器,它们在默认情况下工作。但是,您可以在此处编辑它们的函数以获得更定制的体验。
用法
此包附带了一些路由,用于启用用户权限和角色管理。路由路径前缀用于路由,例如,在我们的示例中,包注册的路由为
+---------+----------------------------------+------------------------------- |Method |URI | Name +---------+----------------+---------------------+--------------------------- | GET |/admin/permissions/users | admin.permissions.users.index | GET |/admin/permissions/users/{id} | admin.permissions.users.show | GET |/admin/permissions/users/{id}/edit| admin.permissions.users.edit | PUT |/admin/permissions/users/{id} | admin.permissions.users.update | GET |/admin/permissions/roles | admin.permissions.roles.index | GET |/admin/permissions/roles/create | admin.permissions.roles.create | POST |/admin/permissions/roles/store | admin.permissions.roles.store | GET |/admin/permissions/roles/{id} | admin.permissions.roles.show | GET |/admin/permissions/roles/{id}/edit| admin.permissions.roles.edit | PUT |/admin/permissions/roles/{id} | admin.permissions.roles.update | DELETE |/admin/permissions/roles/{id} | admin.permissions.roles.destroy
视图
在您的视图中,您可以使用用户模型的 sees() 函数显示或隐藏元素,例如,在您的链接中,您可以选择仅显示用户可能访问的链接,以避免不必要的 403 错误。例如
@if(auth()->user()->sees('admin.users.create')) <a href="{{ route('admin.users.create') }}">Create User</a> @endif
只有有权创建用户的用户才会看到此链接。
许可证
此包在 MIT 许可证下提供开源使用。