keevitaja/keeper

该包已被放弃,不再维护。未建议替代包。
该包最新版本(1.0.1)没有可用的许可信息。

Keeper - Laravel认证驱动器Eloquent扩展

1.0.1 2014-02-24 13:11 UTC

This package is auto-updated.

Last update: 2022-02-01 12:31:29 UTC


README

ProjectStatus

基于角色/权限的认证包使用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