我正在开发一个使用laravel 4的站点,并试图使用Sentry 2实现我的ACL。我需要关于如何构造以下内容的帮助:
对于角色HR,我有以下权限:
Staffs|View staff details
Staffs|Register new staff
Staffs|Edit staff details
Staffs|Delete staff details
对应于下列路线:
//get route to staffs landing page
Route::get('staffs/view-staffs', 'UsersController@getManageStaffs');
//post routes
Route::post('staffs/add-staff', 'UsersController@postAddStaff');
Route::post('staffs/update-staff', 'UsersController@postUpdateStaff');
Route::post('staffs/delete-staff', 'UsersController@postDeleteStaff');
我需要对以下方面进行访问控制:
发布于 2014-04-02 16:45:38
您可以这样做:
在app/filters.php中,创建一个过滤器,如下所示。
Route::filter('permissions', function()
{
$name = Route::current()->getName();
$name = 'system' . ( ! empty($name) ? '.' : '') . $name;
if (!UserHelper::hasPermission($name)) {
App::abort(401, 'You are not authorized to access route '.$name);
}
});
你可以通过在你的路线上放置一个前置过滤器来应用过滤器。
Route::group(array('before' => 'permissions'), function()
{
// routes
}
使用此系统,您可以创建以下权限组:
Sentry::getGroupProvider()->create(array(
'id' => 1,
'name' => 'Super Administrators',
'permissions' => array(
'system' => 1,
),
));
Sentry::getGroupProvider()->create(array(
'id' => 2,
'name' => 'Administrators',
'permissions' => array(
'system.users' => 1,
'system.products' => 1,
'system.store' => 1,
'system.profile' => 1,
),
));
Sentry::getGroupProvider()->create(array(
'id' => $id++,
'name' => 'Managers',
'permissions' => array(
'system.products' => 1,
'system.store' => 1,
'system.profile' => 1,
),
));
因此,如果用户拥有system.products
权限,他将能够使用每个产品路由。
现在,对于您希望显示到特定组的链接的部分,您可以使用这样的助手来实现这一点:
public static function has($permission)
{
$all = [];
$parts = explode('.',$permission);
$permission = '';
foreach($parts as $part) {
$permission .= (!empty($permission) ? '.' : '') . $part;
$all[] = $permission;
}
return Sentry::check() and Sentry::getUser()->hasAnyAccess($all);
}
您只需将路由名称(例如system.products)传递给函数,它就会返回用户是否可以访问它。来源:https://laracasts.com/forum/conversation/post/2819
发布于 2014-06-02 21:51:17
sentry有一个很酷的包,它实现了一个功能齐全的管理面板https://github.com/intrip/laravel-authentication-acl。
https://stackoverflow.com/questions/22781471
复制相似问题