larasoft/permissions

此包已被废弃且不再维护。未建议替代包。
此包的最新版本(dev-master)没有提供许可证信息。

dev-master / 1.2.x-dev 2017-03-05 10:48 UTC

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

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