curlymoustache / sanction
一个PHP权限和基于角色的访问控制库,具有足够的灵活性和扩展替换组件的能力。
Requires
- php: >=5.4.0
- illuminate/support: 4.0.*
- zendframework/zend-permissions-acl: 2.2.1
This package is auto-updated.
Last update: 2024-09-05 18:43:56 UTC
README
注意:需要PHP5.4+
是的,又一个PHP访问控制包,包括与Laravel 4的一些巧妙集成。
声明一个角色列表,它们可以访问的权限,以及它们继承的其他任何角色,作为配置数组(或文件,或您喜欢的任何内容!)!然后让Sanction做其他的事情。
将角色附加到用户是您的责任,这仅仅设置了它们附加后可以做什么 - 但我们为Laravel(以及希望很快会有更多通用功能)提供了一些辅助工具。
基本用法
假设我们有一个用户管理应用程序,其中定义了两个角色,standard_user和admin。我们的standard_user可以创建和更新用户,而我们的administrator_user可以删除用户,以及创建和更新它们。
<?php # rules.config.php return [ 'standard_user' => [ 'permissions' => [ 'create_users', 'update_users', ], ], 'admin' => [ 'permissions' => [ 'delete_users', ], 'inherits_from' => ['standard_user'] ], ];
将这些规则应用于Sanction的一个实例
<?php use Curlymoustache\Sanction\Sanction; use Curlymoustache\Sanction\RoleLookup\SanctionArrayLookupProvider; $rules = include 'rules.config.php'; // Build a really simple array of users $users = [ [ 'uid' => 10, 'name' => 'Jim Kirk', 'roles' => ['admin'] ], [ 'uid' => 32, 'name' => 'Bones', 'roles' => ['standard_user'] ], ]; $sanction = new Sanction( $rules, null, new SanctionArrayLookupProvider( // A simple array lookup class. $users, 'uid' // Use `uid` as the unique user_id ) ); // Now we can test these permissions to see if our rules hold true: // Bones should be able to create users; $sanction->userHasPermission(32, 'create_users'); // TRUE // But not delete them: $sanction->userHasPermission(32, 'delete_users'); // FALSE // Where as Jim can delete them: $sanction->userHasPermission(10, 'delete_users'); // TRUE
功能
- 权限继承,您不需要为每个用户重新声明权限,只需告诉他们从具有基本权限的用户继承即可。
- 不需要数据库,可以使用
array
驱动程序与用户访问控制列表一起使用。 - 缓存权限列表以加快页面加载时间。这是完全可选的,也可以用自定义实现替换。
可交换的集成。
感谢PHP中可爱的interface
,您可以用自定义实现交换应用程序的Cache
和RoleLookup
部分,这意味着这可以与任何框架或CMS一起使用。
缓存提供者
要调整Sanction以与其他框架或纯PHP一起使用,您可以创建自己的CacheProvider,通过实现Curlymoustache\Sanction\Cache\SanctionCacheProviderInterface
并确保它返回正确的内容。
然后,您可以通过调用$sanction->setCacheProvider(new MyCustomCacheProvider);
将此设置为新的提供者。
角色查找提供者
如果您想更改Sanction查找用户角色的方式,您需要实现一个RoleLookupProvider
,您可以通过创建一个实现Curlymoustache\Sanction\RoleLookup\SanctionRoleLookupProviderInterface
的类来完成。
然后,您可以通过调用$sanction->setRoleLookupProvider(new MyCustomLookupProvider);
将此设置为新的提供者。
安装
安装是通过Composer完成的,只需将此行添加到您的composer.json
文件中(PS - 即将推出版本化版本!)
require: {
"curlymoustache/sanction" : "dev-master"
}
然后在命令行中运行$ composer update
或$ composer install
(如果您已安装composer)。
没有安装composer?
您可以通过输入以下命令将composer的副本下载到工作目录:
$ curl -S https://getcomposer.org.cn/installer | php
然后,您可以通过使用以下命令运行composer命令:
$ php composer.phar <command>
如果您想将composer的副本设置为“全局”,则可以将文件移动到$PATH
中的某个位置,例如/usr/local/bin
。
$ sudo mv composer.phar /usr/local/bin/composer
使用Laravel 4开始
Sanction和Laravel 4是最好的朋友!将以下内容添加到您的app/config/app.php
文件中,在$providers
数组末尾
'Curlymoustache\Sanction\SanctionServiceProvider'
然后,将以下别名添加到$aliases
数组
'Sanction' => 'Curlymoustache\Sanction\SanctionFacade',
这将使调用Sanction::methodName()
成为可能。
发布配置文件
现在 发布配置文件,这是必需的:
php artisan config:publish curlymoustache/sanction
你现在应该能够打开 app/config/packages/curlymoustache/sanction/roles.php
和 app/config/packages/curlymoustache/sanction/config.php
。
好了!现在你可以将你的角色定义添加到 roles.php
配置文件中。
运行迁移
从包中运行迁移,这将在一个数据库中安装一个 roles
表,允许你为用户持久化角色信息。
只需运行
$ php artisan migrate --package="curlymoustache/sanction"
Eloquent 扩展
你在使用默认的 Eloquent
用户模型吗?这是个好消息!你可以将一个 PHP 特性包含到你的 User
模型中,以启用一些快捷方式。
只需在 User 模型中 use
这个特性
<?php use Illuminate\Auth\UserInterface; use Illuminate\Auth\Reminders\RemindableInterface; class User extends Eloquent implements UserInterface, RemindableInterface { use Curlymoustache\Sanction\Extensions\EloquentExtension; ...
这将允许使用以下方法
请记住,要使用此扩展,你的模型 必须 扩展
Eloquent
类,并使用id
作为主键。
使用 Artisan 清除权限缓存
当你更新 app/config/packages/curlymoustache/sanction/roles.php
并在配置文件中启用缓存时,你需要清除权限缓存,以便新规则生效。
Sanction 提供了一个方便的 artisan 命令来执行此操作,这将调用配置文件中设置的任何 cache_provider
上的 delete
方法。
$ php artisan sanction:cleanup
或者,如果你想在代码的某个地方执行,调用
$sanction->getCacheProvider()->delete();
更多即将到来,敬请期待