如何在内置的Laravel身份验证的基础上构建特权系统?

时间:2015-08-02 19:14:45

标签: php laravel permissions laravel-5.1

我需要构建某种类型的权限系统,我可以控制谁可以在我的应用上执行什么操作。我已经在网上看到了许多现成的软件包,但没有一个能够在不对我的权限/模板进行硬编码的情况下利用它来满足我的需求。

我的想法是创建一个中间件,它将针对登录使用进行身份验证。如果我有以下路线

Route::get('accounts', array(
    'as' => 'accounts_index_path',
    'uses' => 'AccountController@index')
);

Route::get('account/create', array(
    'as' => 'account_create_path',
    'uses' => 'AccountController@create')
);

Route::post('account/store', array(
    'as' => 'account_store_path',
    'uses' => 'AccountController@store')
);

Route::get('account/{account}', array(
    'as' => 'account_show_path',
    'uses' => 'AccountController@show')
)->where('account', '[0-9]+');

Route::get('account/{account}/edit', array(
    'as' => 'account_edit_path',
    'uses' => 'AccountController@edit')
)->where('account', '[0-9]+');

Route::put('account/{account}/update', array(
    'as' => 'account_update_path',
    'uses' => 'AccountController@update')
)->where('account', '[0-9]+');


Route::delete('account/{account}', array(
    'as' => 'account_destroy_path',
    'uses' => 'AccountController@destroy')
)->where('account', '[0-9]+');

理论上,我应该能够让用户访问以下路由名称“account_store_path”,“'account_create_path”,“accounts_index_path”......

也许,如果我不希望用户访问特定路线,那么我就不会授予他们权限。

理论上这应该有效,但我希望有一个更健壮的系统,我可以让用户有权编辑记录,但不能用于所有字段。例如,我希望具有“经理”角色的用户能够更改帐户名称,帐户所有者,但我不希望具有“标准”角色的用户编辑这些字段,但我希望标准用户能够更新备注字段和其他字段。

为了清楚起见,我知道我可能需要创建一个包含所有允许权限的模板,然后将用途分配给正确的模板。

当我掌握谁可以更新内容时,我需要帮助尝试设计这种特权系统的最佳方法。

问题 如何允许/禁止用户更新某些字段而不更新其他字段?

1 个答案:

答案 0 :(得分:0)

可以在Laravel中构建角色。有一个视频教程可以在用户身份验证上构建您自己的角色系统。请点击此链接https://laracasts.com/lessons/users-and-roles这是为Laravel 4.2完成的,但如果稍加改动,您应该能够为Laravel 5.x制作它。我已经在4.2,5.0和5.1上做了它。完成后,您可以创建管理员,超级用户,更新用户等组,具体取决于您的权限结构,为不同的组提供不同的权限。

有关此主题的几个链接:

https://laracasts.com/discuss/channels/laravel/which-package-is-best-for-roles-permissions/?page=2
https://laracasts.com/discuss/channels/general-discussion/users-and-roles-1

修改
我已经更详细地回答了另一个问题,也可能与它相关:
Laravel 5.1 multiple authentication