bfg / permission
创建和监控 Laravel gates 规则的能力
Requires
- php: >=8.0.0
- bfg/entity: *
- bfg/installer: *
- bfg/object: *
- bfg/repository: *
This package is auto-updated.
Last update: 2024-08-28 04:10:31 UTC
README
安装
- 作为依赖项安装
composer require bfg/permission
- 为
Permission
特性设置环境
<?php namespace App\Models; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; use App\Models\Traits\User\UserHasRole; use Illuminate\Database\Eloquent\Factories\HasFactory; use Bfg\Permission\Traits\Permissions; /** * User Class * @package App\Models */ class User extends Authenticatable { use Notifiable, UserHasRole, HasFactory, Permissions; // Like this // ... }
- 安装资源和表格
php artisan install bfg/permission
关于概念。
能够创建和监控 Laravel gates
规则,通过角色分布控制,并能够方便地控制。还包括用户角色模型和一系列预定义的角色,例如:Root
、Administrator
、Moderator
、User
、Guest
。
描述
该软件包具有角色层次结构,并可以使用 Laravel gates
系统在它们之间分配访问权限。门仓只是一个位于 "Storage" 文件夹中的 "PHP" 文件,其中包含一个数组。
在哪里可以使用它?
每次您想要通过门来使用 "Laravel" 授权控制系统,但又不想在控制所有门和禁用或切换用户角色时手动创建一堆规则或文件时。
发布
发布配置
php artisan vendor:publish --tag=permission-config
发布迁移
php artisan vendor:publish --tag=permission-migrations
命令
用于管理和在角色之间分配访问权限的命令。
权限列表
显示门规则的全列表。
Usage: permissions [<find>] Arguments: find Find word
但是,规则可能太多,此时可以通过搜索使用,例如在命令后指定搜索词
php artisan permissions message
输出
+---------------------+--------+---------------+-----------+------+-------+ | Name | Global | Administrator | Moderator | User | Guest | +---------------------+--------+---------------+-----------+------+-------+ | viewAny-message | Yes | No | Yes | Yes | Yes | | view-message | Yes | No | Yes | Yes | Yes | | create-message | Yes | No | Yes | Yes | Yes | | update-message | Yes | No | Yes | Yes | Yes | | delete-message | Yes | No | Yes | Yes | Yes | | restore-message | Yes | No | Yes | Yes | Yes | | forceDelete-message | Yes | No | Yes | Yes | Yes | +---------------------+--------+---------------+-----------+------+-------+
允许或添加权限
要立即添加具有开放访问权限或开放访问规则,必须使用此命令。
Usage: allow [options] [--] <name> [<role_or_user_id>] Arguments: name The name of permission role_or_user_id Role slug or user id in system Options: -r, --resource Resource permission
如果您将规则作为资源创建
php artisan allow message -r
您将创建7个名为您指定的规则,即:viewAny-message
、view-message
、create-message
、update-message
、delete-message
、restore-message
、forceDelete-message
为了管理角色或用户的访问权限,您可以添加以下参数来调用用户ID或角色名称
php artisan allow message guest -r
为访客打开所有通信资源的访问权限。
禁止或添加权限
要立即添加具有封闭访问权限或关闭访问权限的规则,必须使用此命令。
Usage: disallow [options] [--] <name> [<role_or_user_id>] Arguments: name The name of permission role_or_user_id Role slug or user id in system Options: -r, --resource Resource permission
团队的所有逻辑与开启团队相同。
php artisan disallow message guest -r
删除权限
从一般列表中删除门规则。
Usage: permission:delete [options] [--] <name> Arguments: name The name of permission Options: -r, --resource Make resource permission
php artisan permission:delete view-message
您可以使用资源标志删除一条规则或立即删除其所有资源
php artisan permission:delete message -r
如何使用?
您创建的所有规则都会自动落入 "Laravel" 门的系统中,并可以在其中使用,就像您以前使用 Laravel gates
系统一样。
<?php namespace App\Http\Controllers; use App\Models\Message; use Illuminate\Http\Request; use Illuminate\Support\Facades\Gate; class MessageController extends Controller { /** * Update the given message. * * @param \Illuminate\Http\Request $request * @param \App\Models\Message $message * @return \Illuminate\Http\Response */ public function update(Request $request, Message $message) { if (! Gate::allows('update-message', $message)) { abort(403); } // Update the message... } }
if (Gate::forUser($user)->allows('update-message', $message)) { // The user can update the message... } if (Gate::forUser($user)->denies('update-message', $message)) { // The user can't update the message... }
if (Gate::any(['update-post', 'delete-message'], $message)) { // The user can update or delete the message... } if (Gate::none(['update-post', 'delete-message'], $message)) { // The user can't update or delete the message... }
Gate::authorize('update-message', $message);
重要!如果您将检索到的门模型作为参数传递,则规则将检查
user_id
和id
用户友好的门字段。这些字段在user_eq_field
和model_eq_field
设置中配置。或者,您可以在其中添加gateCheck(string $rule, Model $user, Model $model)
方法以编写类验证规则。