mabrouk / 权限
一个用于处理自定义组权限的 Laravel 扩展包
Requires
- laravel/framework: >=9
- mabrouk/filterable: >=1
- mabrouk/translatable: >=1
Requires (Dev)
- orchestra/testbench: ^7.0@dev
- dev-master
- 1.7.2
- 1.7.1
- 1.7.0
- 1.6.7
- 1.6.6
- 1.6.5
- 1.6.4
- 1.6.3
- 1.6.2
- 1.6.1
- 1.6.0
- 1.5.7
- 1.5.6
- 1.5.5
- 1.5.4
- 1.5.3
- 1.5.2
- 1.5.1
- 1.5.0
- 1.4.0
- 1.3.4
- 1.3.3
- 1.3.2
- 1.3.1
- 1.3.0
- 1.2.9
- 1.2.8
- 1.2.7
- 1.2.6
- 1.2.5
- 1.2.4
- 1.2.3
- 1.2.2
- 1.2.1
- 1.2.0
- 1.1.9
- 1.1.8
- 1.1.7
- 1.1.6
- 1.1.5
- 1.1.4
- 1.1.3
- 1.1.2
- 1.1.1
- 1.1.0
- 1.0.7
- 1.0.6
- 1.0.5
- 1.0.4
- 1.0.3
- 1.0.2
- 1.0.1
- 1.0.0
- v0.2.2-alpha
- v0.2.1-alpha
- v0.2.0-alpha
This package is auto-updated.
Last update: 2024-09-23 14:13:51 UTC
README
mabrouk/permission 是一个 Laravel API 扩展包,使用数据库方法处理项目管理员权限。
目录
重要介绍
为了最大限度地利用此包的结果,请尝试遵循标准的路由命名规则,以便权限名称组织得很好,非常适合您的模型名称。
- 在路由命名中避免使用动词,如 get_users 和 get_news,而是使用模型复数名称会更合适,相信我。
使用顺序
安装和修改配置后
- 添加新路由(如果您还没有的话),配置文件中有一个基本 URL
- 当您需要在新添加的路由上应用权限时,请运行命令
php artisan permission:seed
- 在您的 API 文档中包含预定义的路由,这些路由控制权限组、角色和权限显示名称,以便前端开发人员可以从中实现。或者引导前端开发人员阅读预期在请求响应中返回的模型 API 资源部分
安装
您可以使用 composer 安装此包。
composer install mabrouk/permission
为了使一切正常工作,请将 PermissionOfficerMiddleware
添加到 app/Http/Kernel.php
类中 $routeMiddleware
属性的末尾
protected $routeMiddleware = [ // ... 'permission-officer' => \Mabrouk\Permission\Http\Middleware\PermissionOfficerMiddleware::class, ];
之后,您可以在同一 kernel
文件中的 $middlewareGroups
属性下接受它,例如在 api
组下,或者您可以在您的路由文件中的特定路由上使用它,就像您之前使用的许多中间件一样。
例如,将第一个选项应用于 api
组会更舒适,因为您在配置包配置与您的项目需求后不再需要考虑它。
protected $middlewareGroups = [ 'api' => [ // ... 'permission-officer', ], ];
- 现在您需要运行以下
命令
以发布包迁移并将permissions.php
配置文件发布到配置目录
php artisan permission:setup
- 然后您需要运行以下
命令
以迁移包表
php artisan migrate
根据项目需求进行配置
配置文件有多个配置选项,并已包含足够的注释来描述每个键的含义以及如何使用。
您可以在 config/permissions.php
下访问它
修改
permissions.php
配置文件后,请勿忘记运行以下命令
php artisan config:cache
在期望的模型上使用 HasPermission
特性
现在您需要在具有角色(例如,“User”模型)等的模型上添加 Mabrouk\Permission\Traits\HasPermission.php
特性。不要忘记将此特性添加到在 permission.php
配置文件中指定为 roleable_models
键的所有模型中,并且不要忘记仔细阅读配置文件中的说明。
- 安装和结构工作都已完成。现在我们需要了解如何使用它。
开箱即用的方法和属性
如上所述,在 permissions.php
配置文件中指定的模型上使用 Mabrouk\Permission\Traits\HasPermission.php
特性后,您将在指定的模型上获得额外的方法和属性。以用户模型为例,我们可以看到以下方法的用法:
方法
-
$user->roles()
这是一个关系方法,以及如何像Laravel的正常关系方法一样访问角色。请注意,这是一个多态关系,因此要获取反向关系$role->users()
,这里的users()
方法将与在permissions.php
配置文件下的roleable_models
键中指定的模型键相同的名称。 -
$user->permissions()
这是一个关系方法,以及如何像Laravel的正常关系方法一样访问权限。 -
$user->subPermissions()
这是一个关系方法,以及如何像Laravel的正常关系方法一样访问子权限。 -
$user->takeRole($role)
您需要将一个角色对象传递给此方法,作为其唯一的参数,以便将角色分配给用户。 -
$user->leaveRole($role)
您需要将一个角色对象传递给此方法,作为其唯一的参数,以便从用户中取消分配角色。 -
$user->canAccess($subPermissionName)
您需要将一个子权限名称传递给此方法,作为其唯一的参数,以检查用户是否具有此特定子权限。 -
$user->leaveAllRoles()
此方法不接受任何参数,它只是断开与用户相关联的所有角色的连接。 -
User::HasPermissions($permissionsIds)
这是一个查询作用域方法,用于筛选具有特定权限的用户,您可以使用->get()
,->first()
或任何其他方法来检索结果,就像通常使用一样。
请注意,这里使用的是User模型作为示例,您可以在应用了
Mabrouk\Permission\Traits\HasPermission.php
特性之后,使用permissions.php
配置文件中的任何指定模型来实现相同的功能。
属性
-
$user->roles
返回用户分配的角色集合。 -
$user->permissions
返回用户分配的权限集合。 -
$user->subPermissions
返回用户分配的子权限集合。 -
$user->SubPermissionsNames
返回用户分配的子权限全名的数组。
开箱即用的模型
我们处理了4个基本模型
PermissionGroup
具有完整的 CRUD 功能以及可翻译的名称Permission
==> 仅索引、显示和更新可翻译的描述和显示名称。它取决于您项目的模型名称。SubPermission
没有单独的 CRUD 功能。通常它是(查看、创建、编辑、删除)之一。Role
具有完整的 CRUD 功能以及可翻译的名称和描述
开箱即用的路由
让我们运行 route:list
命令来发现我们的包预定义的路由
php artisan route:list
实际上,我们将在以下路由的输出中找到您的项目当前路由的输出
Route::apiResource('permission-groups', PermissionGroupController::class); Route::apiResource('permissions', PermissionController::class, ['except', ['store', 'destroy']]); Route::apiResource('roles', RoleController::class);
显示、更新和销毁路由接受模型
id
作为 URL 中的模型段
如果上述路由不存在,您可能需要使用命令
php artisan route:clear
清除缓存的路由
还有什么?
您只需运行以下命令即可处理项目的权限,只需在添加了任何在 permissions.php
配置文件中定义的基础 URL 下指定的额外路由后运行此命令。
注意
您需要在配置文件中添加或修改与
base_urls
相关的任何路由后运行以下命令,以便添加或修改其适当的权限。
php artisan permission:seed
现在您将发现配置文件中指定的
project_full_permission_admins
具有完整的权限。
子权限将根据您的路由可用操作进行添加。例如,如果您指定了API资源路由的存储和销毁操作,它将相应地影响添加的子权限,否则它将为超级管理员用户添加4个操作,以便根据他正在修改的具体角色进行操作。
预期在请求响应中返回的模型 API 资源
- PermissionGroupResource 返回在所有权限组请求中(除索引外)
<?php namespace Mabrouk\Permission\Http\Resources; use Illuminate\Http\Resources\Json\JsonResource; class PermissionGroupResource extends JsonResource { /** * Transform the resource into an array. * * @param \Illuminate\Http\Request $request * @return array */ public function toArray($request) { return [ 'id' => $this->id, 'name' => $this->name, 'permissions' => PermissionResource::collection($this->permissions), ]; } }
- PermissionGroupSimpleResource 返回权限组索引请求
<?php namespace Mabrouk\Permission\Http\Resources; use Illuminate\Http\Resources\Json\JsonResource; class PermissionGroupSimpleResource extends JsonResource { /** * Transform the resource into an array. * * @param \Illuminate\Http\Request $request * @return array */ public function toArray($request) { return [ 'id' => $this->id, 'name' => $this->name, ]; } }
- PermissionResource
<?php namespace Mabrouk\Permission\Http\Resources; use Illuminate\Http\Resources\Json\JsonResource; class PermissionResource extends JsonResource { /** * Transform the resource into an array. * * @param \Illuminate\Http\Request $request * @return array */ public function toArray($request) { return [ 'id' => $this->id, 'name' => $this->display_name, 'selected' => $this->isSelected, 'group' => new PermissionGroupSimpleResource($this->group), 'sub_permissions' => SubPermissionResource::collection($this->subPermissions), ]; } }
- SubPermissionResource
<?php namespace Mabrouk\Permission\Http\Resources; use Illuminate\Http\Resources\Json\JsonResource; class SubPermissionResource extends JsonResource { /** * Transform the resource into an array. * * @param \Illuminate\Http\Request $request * @return array */ public function toArray($request) { return [ 'id' => $this->id, 'name' => $this->display_name, 'selected' => $this->isSelected, ]; } }
- RoleResource ==> 在角色 CRUD 中使用(除索引外)
<?php namespace Mabrouk\Permission\Http\Resources; use Mabrouk\Permission\Models\PermissionGroup; use Illuminate\Http\Resources\Json\JsonResource; class RoleResource extends JsonResource { /** * Transform the resource into an array. * * @param \Illuminate\Http\Request $request * @return array */ public function toArray($request) { return [ 'id' => $this->id, 'name' => $this->name, 'permission_groups' => PermissionGroupResource::collection(PermissionGroup::all()), ]; } }
- RoleSimpleResource ==> 仅在角色索引中使用
<?php namespace Mabrouk\Permission\Http\Resources; use Illuminate\Http\Resources\Json\JsonResource; class RoleSimpleResource extends JsonResource { /** * Transform the resource into an array. * * @param \Illuminate\Http\Request $request * @return array */ public function toArray($request) { return [ 'id' => $this->id, 'name' => $this->name, 'description' => $this->description, ]; } }
还有其他吗?
实际上还有一个需要知道的事情,就是这个包依赖于mabrouk/translatable包,以便动态处理任何选择的语言的翻译。
您需要在所提到的模型的更新请求中传递额外的输入“locale”,并且需要使用您应用程序的默认语言创建角色和权限组。为了以期望的语言获取角色/权限/权限组名称或描述,您需要向请求中传递额外的头“X-locale”。
“locale”和“X-locale”都接受类似于['en', 'ar', 'fr', ...]等值,具体取决于您在项目中支持的语言。
许可协议
Mabrouk/Permission包是开源软件,遵循MIT许可证。