bozboz / permissions
此包已被废弃,不再维护。未建议替代包。
关于此包的最新版本(v1.2.0)没有提供许可证信息。
v1.2.0
2017-01-18 11:06 UTC
Requires
- php: >=5.4.0
- illuminate/contracts: 5.*
README
此包实现了一个基本的权限系统,基于Laravel在5.1.11版本中实现的版本。
配置
- 将
Bozboz\Permissions\PermissionServiceProvider
类添加到您的 app/config.php 文件中。 - 可选地,将
Bozboz\Permissions\Facades\Gate
门面添加到 app/config.php 中的别名数组中。 - 使用
php artisan migrate:publish bozboz/permissions && php artisan migrate
发布并运行迁移
使用方法
首先,在 app/permissions.php 中定义一些规则。这些通常是用户可以在您的应用程序中执行的操作。
$permissions->define('manage_page', 'Bozboz\Permissions\Rules\Rule'); $permissions->define('delete_pages', 'Bozboz\Permissions\Rules\GlobalRule');
默认情况下有两个规则类:Rule 和 GlobalRule。前者用于您有一个依赖于上下文值(通常是模型ID)的规则。全局规则是一个不需要任何其他数据就能理解其含义的规则。
每次您想要检查用户是否有权限执行某个操作时,您都会询问 Gate
if (Gate::allows('delete_pages')) { $instance->delete(); }
或者,如果您还没有注册门面,您可以通过构造函数注入 Checker 对象或通过 IoC 容器检索
if (app('permission.checker')->allows('delete_pages')) { $instance->delete(); }
注意,默认情况下,当前认证的用户将被用于检查权限。要授权特定用户,请传入它
if (Gate::forUser($user)->allows('delete_pages')) { $instance->delete(); }
您还可以反转检查,确定当前用户是否被 禁止 执行任务
if (Gate::forUser($user)->disallows('delete_pages')) { App::abort(403); } $instance->delete();
认证的用户实例必须实现 Bozboz\Permissions\UserInterface
。实现此接口的用户实现必须定义一个 getPermissions
方法。实现可以以任何方式检索权限。
规则堆栈
规则堆栈允许不同级别的访问权限堆叠在一起,允许认证用户匹配任何定义的权限。这对于定义“全局”权限并将更具体的规则堆叠在上面很有用,例如。
if (RuleStack::with('view_pages')->then('view_anything')->isAllowed()) { // User is able to view pages and/or view anything }
堆栈将首先检查最左边的规则,然后使用 then
方法定义的进一步规则;在找到允许的规则时停止执行。如果没有允许的规则,方法将返回 false。
或者,可以使用 add
方法实例化 RuleStack 对象并向其添加规则
$stack = new RuleStack; $stack->add('edit_anything'); $stack->add('edit_page', 5); return $stack->isAllowed();
在这里,堆栈将首先检查最后添加的规则,然后逐步向上工作。