lcloss / simple-permission
Laravel项目的授权模式
Requires
- livewire/livewire: v2.12.6
README
SimplePermission 是一个为 Laravel 设计的简单授权包。它专为 Laravel 10 设计,但也可能与其他版本兼容。使用此包,您可以为 Laravel 应用程序添加角色和权限,从而轻松管理授权。
安装
-
使用 composer 安装此包
composer require lcloss/simple-permission
-
发布配置文件
php artisan vendor:publish --provider="Lcloss\SimplePermission\SimplePermissionServiceProvider"
-
编译资源
npm run build
-
运行迁移
php artisan migrate
-
将
HasRoles
特性添加到您的User
模型中use Lcloss\SimplePermission\Models\Traits\HasRoles; class User extends Authenticatable { use HasRoles; }
-
将
AuthGates
中间件添加到您的app\Http\Kernel.php
文件中protected $middlewareGroups = [ 'web' => [ // ... \Lcloss\SimplePermission\Http\Middleware\AuthGates::class, ], 'api' => [ // ... \Lcloss\SimplePermission\Http\Middleware\AuthGates::class, ], ];
-
将
role
添加到user
,如果您使用 Laravel Fortify,则可以更改 App\Actions\Fortify\CreateNewUser.php 文件use Lcloss\SimplePermission\Models\Role; class CreateNewUser { // ... public function create(array $input) { // ... // If you are getting the first and last names: $name = trim($input['first_name'] . ' ' . $input['last_name']); DB::beginTransaction(); $user = User::create([ 'name' => $name, 'email' => $input['email'], 'password' => Hash::make($input['password']), ]); $countUsers = User::count(); if ( $countUsers == 1 ) { $role = Role::where('slug', 'sysadmin')->first(); } else { $role = Role::where('slug', 'user')->first(); } $user->roles()->attach($role); DB::commit(); return $user; } }
根据上述配置,第一个创建的用户将是一个
sysadmin
,其他用户将是user
。 -
其他注意事项
检查包的 blade 文件。您可以通过在 config/simple-permission.php
文件中替换 blade 文件名来使用自己的 blade 文件。别忘了
a) 在布局文件中添加 @liwewireStyles() 和 @livewireScripts()。b) 在布局文件中添加 @yield('scripts')。c) 在布局文件的 body 结尾添加 @yield('modals')。
配置
您可以通过编辑 config/simple-permission.php
文件来更改此包的配置。
数据库 Seeder
此包包含一个数据库 Seeder,用于创建默认的角色和权限。您可以使用以下命令运行它
php artisan db:seed --class=SimplePermissionSeeder
或者,您也可以运行单独的 Seeder
php artisan db:seed --class=SimplePermissionRoleSeeder php artisan db:seed --class=SimplePermissionPermissionSeeder
角色和权限
角色
此包包含以下默认角色:'sysadmin'、'admin'、'premium-user'、'user' 和 'free-user'。
每个角色都有一个唯一的 slug
和一个 level
,用于确定角色的层次结构。级别为 1 的角色是最高级别的角色,级别为 300 的角色是最低级别的角色。所有级别为 1 的角色都享有所有权限。
您可以通过编辑 database\seeders\SimplePermissionRoleSeeder.php
文件来自定义角色。
权限
权限遵循 access
、list
和 CRUD 操作(create
、read
、update
和 delete
)的结构。通常,access
权限用于允许访问资源,list
权限用于允许列出资源,而 CRUD 权限用于允许对资源进行操作。
权限由一个 object
和一个 action
组成,由一个 _
字符分隔。一个对象是一个资源,如 users
、roles
、permissions
、posts
或 comments
。一个动作是对资源的操作,如 access
、list
、create
、read
、update
或 delete
。
因此,权限 users_create
确定用户是否可以创建用户,而权限 users_list
确定用户是否可以列出用户。
您可以通过编辑 database\seeders\SimplePermissionPermissionSeeder.php
文件来自定义权限。
要保护路由,您可以使用 can
中间件
Route::get('/users', [UserController::class, 'index'])->middleware('can:users_list');
要保护控制器方法,您可以使用 can
中间件
use Gate; class UserController extends Controller { public function index() { Gate::authorize('users_list'); // ... } }
要保护视图的一部分,您可以使用 @can
指令
@can('users_list') <a href="{{ route('users.index') }}">Users</a> @endcan
待办事项
- 添加测试
- 添加 artisan 命令