alleyinteractive / simple-laravel-roles
基于PHP的Laravel简单权限
Requires
- illuminate/support: ~7|~8
Requires (Dev)
- orchestra/testbench: ~5|~6
- phpunit/phpunit: ~9.0
README
此包为Laravel应用程序添加了非常简单的角色/能力功能,角色和能力通过配置文件定义。
一旦定义了角色和能力并将角色分配给用户,就可以使用Laravel内置的授权功能来检查能力。
if ($user->can('edit_posts')) { // Cool. }
安装
通过Composer
$ composer require alleyinteractive/simple-laravel-roles
设置和配置
-
安装此包后,您可以使用Artisan发布包文件。
php artisan vendor:publish --provider="Alley\SimpleRoles\SimpleRolesServiceProvider"
这将向您的应用程序添加两个文件
config/roles.php
是您定义角色的位置。database/migrations/<date>_add_roles_to_users_table.php
向users
表添加一个roles
列。如果此文件不适用于您的用例,请删除此文件。
-
在
config/roles.php
中配置您的角色和能力。 -
运行
php artisan migrate
以将roles
添加到users
表。如果您想将roles
添加到更多表,请先创建您的迁移。 -
将
Alley\SimpleRoles\HasRoles
特性添加到User
模型以及任何具有角色的模型。
用法
在门和策略中
此包旨在通过添加用户或其他模型的角色和能力桶来增强Laravel内置的授权功能。这些桶可以在您的门或策略检查期间进行检查。
以下是一个利用能力允许删除帖子(如果用户拥有该帖子或用户被允许删除其他用户的帖子)的示例策略方法
use App\Models\Post; use App\Models\User; use Illuminate\Auth\Access\Response; /** * Determine if the given post can be deleted by the user. * * @param \App\Models\User $user * @param \App\Models\Post $post * @return \Illuminate\Auth\Access\Response */ public function delete(User $user, Post $post) { return $user->id === $post->user_id || $user->can('delete_others_posts') ? Response::allow() : Response::deny('You do not own this post.'); }
替代门和策略
根据应用程序的复杂性,此包甚至可以替换门和策略检查。它将 拦截所有门检查,在执行其他授权检查之前,如果用户在其任一角色的能力中具有给定的能力,则检查将通过。这样,Laravel的核心授权功能将按正常工作,并将检查能力而不是定义门或策略。换句话说,如果用户具有具有 delete_posts
能力的角色,则可以使用以下方式检查该能力:
if ($user->can('delete_posts')) { /* ... */ }
以及在Blade模板中
@can('delete_posts') // ... @endcan
HasRoles
特性还包括一些用于检查能力和角色的辅助函数
hasCapability(string $capability): bool
:检查对象是否具有给定能力。hasRole(string $role): bool
:检查对象是否具有给定角色。getRoles(): Collection
:获取对象的Role对象作为角色。setRoles(array $roles): bool
:设置对象的角色。addRole(string $role): bool
:向对象添加角色。removeRole(string $role): bool
:从对象中删除角色。
此外,该包提供了一个 Role
类,可用于检查特定角色的能力。
$contributor = new Role('contributor'); if ($contributor->can('create_posts')) { /* ... */ }
变更日志
请参阅 变更日志。
测试
$ composer test
贡献
请参阅 contributing.md 以获取详细信息和工作清单。
安全
如果您发现任何安全相关的问题,请通过作者的电子邮件(在 composer.json
中找到)联系作者,而不是使用问题跟踪器。
致谢
- [Matthew Boynes][@mboynes]
许可证
MIT。更多信息请参阅许可证文件。