keevitaja / keeper
Keeper - Laravel认证驱动器Eloquent扩展
Requires
- php: >=5.4.0
- illuminate/support: 4.1.*
This package is auto-updated.
Last update: 2022-02-01 12:31:29 UTC
README
基于角色/权限的认证包使用Guard
Keeper通过扩展Guard类,向Laravel认证驱动器Eloquent添加了角色和权限功能。这意味着,你可以使用Auth::做任何事情。
Keeper不是一个用于用户/角色/权限数据库操作的CRUD。人们有太多想要的方式去做这件事,我们最终会得到另一个Sentry,其中包含许多需要捕获的异常。这并不有趣...
Keeper至少需要Laravel 4和PHP 5.4
安装
要使用Composer安装Keeper包,编辑composer.json文件并运行composer update
。
"require": {
"laravel/framework": "4.1.*",
"keevitaja/keeper": "dev-master"
},
更改Auth驱动器在app/config/auth.php中
'driver' => 'keeper',
向app/config/app.php中添加服务提供者
'Keevitaja\Keeper\KeeperServiceProvider'
向app/config/app.php中添加外观
'Keeper' => 'Keevitaja\Keeper\KeeperFacade'
迁移表
php artisan migrate --package=keevitaja/keeper
之后,你将拥有用户、角色和权限表以及枢纽表。
users: id, email, password, created_at, updated_at
roles: id, name, created_at, updated_at
permissions: id, name, created_at, updated_at
有关如何命名角色和权限的提示,请参阅下面的使用示例。
Keeper使用枢纽关系设置表,例如,用户和角色表将具有角色_user枢纽关系表。请参阅枢纽部分下的Eloquent文档,了解如何在用户和角色之间建立连接。
你可以根据需要向用户、角色和权限表添加任意数量的额外列。你可以创建新的迁移来更新已创建的表,或者创建自己的迁移而不是从包迁移。这取决于你。
使用
Keeper::hasRole($userId, $roleName)
确定用户是否有角色 - 返回true/false
Keeper::hasPermission($userId, $permissionName)
确定用户是否有权限 - 返回true/false
Keeper::flushCache()
清除缓存,请参阅下面的缓存部分 - 返回void
Auth::hasRole($roleName)
确定登录用户是否有角色 - 返回true/false
Auth::hasPermission($permissionName)
确定登录用户是否有权限 - 返回true/false
用户可以有多个角色和多个权限。角色也可以有多个权限。权限可以直接分配给用户,也可以通过角色分配。Keeper非常灵活,适用于大型和中小型项目。如果需要,可以完全忽略权限,只使用角色。
角色和权限与Laravel路由和过滤器系统配合得非常好。将它们一起使用是很有意义的。下面是使用示例。
缓存
默认情况下,缓存是禁用的。要启用它,请运行
php artisan config:publish keevitaja/keeper
现在你可以在 app/config/packages/keevitaja/keeper
文件夹中找到可用的配置文件,你可以安全地修改它。
cache
- 启用或禁用缓存功能(布尔值)cache_id
- 缓存键/标签名称的标识符。没有理由修改它(字符串)cache_expire
- 缓存过期时间,以分钟为单位(整数)cache_tags
- 启用或禁用缓存标签的使用(布尔值)
缓存标签在文件或数据库缓存驱动程序中不可用。因为 Keeper::flushCache()
需要缓存标签。刷新功能仅适用于支持缓存标签的驱动程序。其中之一是memcached驱动程序。
Keeper::flushCache()
只刷新与Keeper相关的缓存!
在数据库操作后始终清除缓存 - 使用连接表的用户、角色和权限属于此类。
Keevitaja\Keeper\Models\User::find(1)->roles()->attach(3);
Keeper::flushCache();
上述示例向具有ID为1的用户添加了ID为3的角色并清除了缓存。
如果你必须使用文件驱动程序,那么你可能不得不清除整个缓存或想出你自己的解决方案。最后的手段是不使用缓存功能。
管理角色和权限
Keeper不提供数据库操作的CRUD。所有模型方法都被抽象到特性中,因此可以在你的项目中轻松地使用其他Eloquent模型中的关系。在缓存部分中可以看到一个示例。
使用示例
Route::filter('finance', function() { if ( ! Auth::hasRole('finance')) dd('no finance role'); }); Route::filter('invoices.create', function() { if ( ! Auth::hasPermission('invoices.create')) dd('no create permission'); }); Route::filter('invoices.update', function() { if ( ! Auth::hasPermission('invoices.update')) dd('no update permission'); }); Route::filter('invoices.destroy', function() { if ( ! Auth::hasPermission('invoices.destroy')) dd('no destroy permission'); }); Route::group(['prefix' => 'invoices', 'before' => 'finance'], function() { Route::get('show', 'InvoicesController@show'); Route::get('create', 'InvoicesController@create')->before('invoices.create'); Route::get('destroy', 'InvoicesController@destroy')->before('invoices.destroy'); }); Route::get('invoices/update', 'InvoicesController@update')->before('invoices.update');
本例中的过滤器名称是角色和权限名称。你可以按任何方式命名权限,但 controller.permission
看起来是有意义的。至少对我来说是这样。
为了使此示例正常工作,你需要一个角色
- finance
和权限
- invoices.create
- invoices.update
- invoices.destroy
这些路由和过滤器为你提供了以下设置
invoices/show
可以被所有具有finance
角色的用户访问invoices/create
可以被所有具有finance
角色和invoices.create
权限的用户访问invoices/destroy
可以被所有具有finance
角色和invoices.destroy
权限的用户访问invoices/update
可以被所有具有invoices.update
权限的用户访问
权限是直接授予用户(permission_user连接表)还是通过角色(permission_role连接表)授予,无关紧要。
如果你喜欢这个
请关注我 @keevitaja