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 命令