bozboz/permissions

此包已被废弃,不再维护。未建议替代包。
关于此包的最新版本(v1.2.0)没有提供许可证信息。

v1.2.0 2017-01-18 11:06 UTC

This package is auto-updated.

Last update: 2021-07-07 10:33:30 UTC


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();

在这里,堆栈将首先检查最后添加的规则,然后逐步向上工作。