anlutro/access

此包已被弃用且不再维护。未建议替代包。
关于此包最新版本(0.1.8)没有提供许可证信息。

Laravel 4的RBAC模型。

0.1.8 2014-09-11 16:59 UTC

This package is not auto-updated.

Last update: 2020-01-19 17:45:09 UTC


README

我对Laravel 4的RBAC系统的尝试。

这可能是极其查询密集型的,我没有做很多尝试来优化查询数量/内存缓存。

我写这个包的目的是用于小型系统,用户数较少。适用于需要基于行控制权限,而不仅仅是通用角色和权限的系统。

贡献

欢迎提交错误报告、功能建议和代码改进。如果您提交了拉取请求,请确保您的更改通过了单元测试。

使用github issue系统!如果您只是想聊天,可以在freenode的#laravel频道找到我。

安装

要求

  • PHP 5.4或更高版本
  • Laravel 4.1或更高版本

安装

composer require anlutro/access

检查packagist.org或github标签列表以获取最新稳定版本,或者如果您喜欢在边缘生活,可以使用dev-master。

复制迁移文件

vendor/anlutro/access/src/migrations中的迁移文件复制到您的应用迁移目录。或者,如果您只想试用系统,可以使用php artisan migrate --package anlutro/access运行它们 - 对于生产环境,建议手动复制迁移文件。

创建您的用户模型

由于您可能想在用户模型/表上添加自己的函数和字段,因此您需要自己创建用户模型。有两种方法可以确保它与RBAC系统一起工作 - 继承(扩展基类)或特质。

class MyUser extends anlutro\Access\Models\User {}

class MyUser extends Eloquent implements anlutro\Access\Interfaces\SubjectInterface
{
	use anlutro\Access\Traits\UserSubject;
}

您负责创建用户表。请记住更新您的app/config/auth.php文件以反映您的模型。

创建一个或多个资源模型

同样,您可以使用继承或特质来完成此操作

class MyResource extends anlutro\Access\Models\Resource {}

class MyResource extends Eloquent implements anlutro\Access\Interfaces\ResourceInterface
{
	use anlutro\Access\Traits\ResourceSubject;
}

您负责创建任何资源表。

用法

首先,我们需要创建一些权限。

use anlutro\Access\Models\Permission;
$lowPermission = Permission::create(['name' => 'Normal Permission']);
$highPermission = Permission::create(['name' => 'High Level Permission']);

然后,让我们将一些权限分配给我们的资源模型上的操作。默认情况下,未分配权限的资源操作是允许的,因此请小心。

MyResource::addGlobalPermissionTo('show', $lowPermission);
MyResource::addGlobalPermissionTo('create', $lowPermission);
MyResource::addGlobalPermissionTo('create', $highPermission);
// MyResource::removeGlobalPermissionTo('create', $highPermission);

您也可以将权限分配给特定的资源。

$resource = MyResource::first();
$res->addPermissionTo('create', $superHighPermission);
// $res->removePermissionTo('create', $superHighPermission);

让我们创建几个角色。这一步是可选的,如果您喜欢,可以直接将权限添加到用户 - 语法完全相同。

use anlutro\Access\Models\Role;
$userRole = Role::create(['name' => 'User Role']);
$adminRole = Role::create(['name' => 'Admin Role']);
$bannedRole = Role::create(['name' => 'Banned']);
$userRole->addPermission($lowPermission);
$adminRole->addPermission($lowPermission);
$adminRole->addPermission($highPermission);
$bannedRole->denyPermission($lowPermission);

让我们将用户角色分配给我们的一个用户。

$user = User::first();
$user->addRole($userRole);
// $user->removeRole($userRole);

现在,该用户应能够查看,但不能创建MyResource。

$resource = MyResource::first();
var_dump( $user->hasPermissionTo('show', $resource) );
$resource = new MyResource;
var_dump( $user->hasPermissionTo('create', $resource) );

如果我们分配给用户管理员角色,那么他应该也有权限创建。

$user->addRole($adminRole);
var_dump( $user->hasPermissionTo('create', $resource) );

大多数情况下,您会针对当前登录的用户运行这些检查。访问外观(Access facade)提供了一些方便的简写函数。

use anlutro\Access\Access;
var_dump( Access::allowed('show', $resource) );
var_dump( Access::denied('create', $resource) );

许可

本存储库的内容在MIT许可证下发布。