larasoft / permissions
此包已被废弃且不再维护。未建议替代包。
此包的最新版本(dev-master)没有提供许可证信息。
dev-master / 1.2.x-dev
2017-03-05 10:48 UTC
Requires
- php: >=5.4.0
- illuminate/contracts: 5.*
This package is not auto-updated.
Last update: 2017-08-01 19:27:03 UTC
README
此包实现了一个基本的权限系统,基于Laravel在5.1.11版本中实现的版本。
设置
- 将
Larasoft\Permissions\PermissionServiceProvider
类添加到您的 app/config.php 文件中。 - 可选地,将
Larasoft\Permissions\Facades\Gate
门面添加到 app/config.php 中的别名数组。 - 使用
php artisan migrate:publish bozboz/permissions && php artisan migrate
发布并运行迁移。
用法
首先,在 app/permissions.php 中定义一些规则。这些通常是用户可以在您的应用程序中执行的操作。
$permissions->define('manage_page', 'Larasoft\Permissions\Rules\Rule');
$permissions->define('delete_pages', 'Larasoft\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();
认证的用户实例必须实现 Larasoft\Permissions\UserInterface
。实现此接口的用户必须定义一个 getPermissions
方法。实现可以随意检索权限。
规则栈
规则栈允许将不同级别的权限堆叠在一起,允许认证用户匹配任何定义的权限。这对于定义“全局”权限并堆叠更具体的规则非常有用。
if (RuleStack::with('view_pages')->then('view_anything')->isAllowed()) {
// User is able to view pages and/or view anything
}
栈将首先检查最左边的规则,然后使用 then
方法定义的进一步规则;当找到允许的规则时停止执行。如果没有允许的规则,方法将返回 false。
或者,可以实例化一个 RuleStack 对象并使用 add
方法向其中添加规则
$stack = new RuleStack;
$stack->add('edit_anything');
$stack->add('edit_page', 5);
return $stack->isAllowed();
在这里,栈将首先检查最后添加的规则,然后向上工作。