anlutro / access
Laravel 4的RBAC模型。
Requires
- php: >=5.4.0
- illuminate/database: ~4.1
- illuminate/support: ~4.1
Requires (Dev)
- mockery/mockery: 0.9.*
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许可证下发布。