【发布时间】:2014-03-06 16:11:49
【问题描述】:
我正在开发一个基本的应用程序核心,首先我使用用户/组和权限访问。
我选择 Sentry 2 工作,并且我想将访问 my.domain/admin 的权限限制为具有管理员权限的用户或组。
我正在开发一个过滤器来检查用户是否是管理员以及是否有权访问特定操作,例如 users.index 或 users.custom_fction。
在我的路线中,我有:
/**
* ADMIN ROUTES
*/
Route::group(array('before' => 'sentry'), function() {
Route::group(array('before' => 'admin'), function() {
Route::group(array('prefix' => 'admin'), function()
{
Route::get('/', function()
{
return View::make('admin');
});
Route::resource('groups', 'GroupController',
array('except' => array('show')));
Route::resource('users', 'UserController',
array('except' => array('show')));
Route::get('users/{id}/groups', 'UserController@groups');
Route::post('users/{id}/groups', 'UserController@store_groups');
Route::get('{table}/{id}/permissions',
'PermissionController@manage_entity');
Route::post('{table}/{id}/permissions',
'PermissionController@update_permissions');
});
});
});
哨兵过滤器仅检查是否已登录并重定向到登录页面,管理员过滤器是:
/*
* Sentry admin & hasAccess filter
*/
Route::filter('admin', function()
{
$user = Sentry::getUser();
if (!$user->hasAccess('admin')) return Redirect::to('/');
// Ask if user hasAccess to specific action
var_dump(Route::getCurrentRoute()->getPath());
var_dump(Route::getCurrentRoute()->getAction());
});
我必须再次检查实际路线,在 getAction 数组中有一个
'as' => string 'admin.users.index' (length=17)
我可以将它用于我定义的 Route::resource,但是,对于其他功能,如组或权限,我是如何做到的。
也许有更好的方法来处理它,但我不知道。
感谢您的建议。
【问题讨论】:
标签: php laravel-4 cartalyst-sentry