roksta/laravel-roles

laravel 的权限和用户角色管理器

dev-master 2019-02-14 09:38 UTC

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 许可证下提供开源使用。