我正在使用 Laravel 4.1 和 Sentry 2 作为授权和身份验证包来构建我的项目。
我已经设法让用户登录、注册并分配适当的用户组。
我有 3 个用户组:
- 行政人员
- 主持人
- 挂号的
我想实现两件事:
- 管理员和演示者可以访问管理面板。用户没有。
- 限制演示者管理面板中的视图。我希望他们只看到很少的视图(链接),例如只有Schedule。
我以前从未使用过角色,这是我第一次使用 Sentry 2。这就是我想寻求帮助的原因。一些点,如何开始。我怎样才能实现两者?
我正在使用 Laravel 4.1 和 Sentry 2 作为授权和身份验证包来构建我的项目。
我已经设法让用户登录、注册并分配适当的用户组。
我有 3 个用户组:
我想实现两件事:
我以前从未使用过角色,这是我第一次使用 Sentry 2。这就是我想寻求帮助的原因。一些点,如何开始。我怎样才能实现两者?
对于更一般的权限检查,我会查看inGroup()
助手:
// Find the user using the user id
$user = Sentry::findUserByID(1);
// Find the Administrator group
$admin = Sentry::findGroupByName('Administrator');
// Check if the user is in the administrator group
if ($user->inGroup($admin)) {
// User is in Administrator group
} else {
// User is not in Administrator group
}
定义所有组的权限。
检查本教程https://cartalyst.com/manual/sentry/users/helpers
并专注于hasAccess($permission)
和hasAnyAccess($permissions)
在过滤器.php
/**
* hasAcces filter (permissions)
*
* Check if the user has permission (group/user)
*/
Route::filter('hasAccess', function($route, $request, $value)
{
try {
$user = Sentry::getUser();
if( ! $user->hasAccess($value)) {
if(Sentry::check())
return Redirect::to('portal')->with('message', 'No Access.');
else
return Redirect::to('registration#login')->with('message', 'No Access.');
}
} catch (Cartalyst\Sentry\Users\UserNotFoundException $e) {
if(Sentry::check())
return Redirect::to('portal')->with('message', 'User not found.');
else
return Redirect::to('registration#login')->with('message', 'User not found.');
}
});
/**
* InGroup filter
*
* Check if the user belongs to a group
*/
Route::filter('inGroup', function($route, $request, $value) {
try {
$user = Sentry::getUser();
$group = Sentry::findGroupByName($value);
if( ! $user->inGroup($group)) {
if(Sentry::check())
return Redirect::to('portal')->with('message', 'No Access.');
else
return Redirect::to('registration#login')->with('message', 'No Access.');
}
} catch (Cartalyst\Sentry\Users\UserNotFoundException $e) {
if(Sentry::check())
return Redirect::to('portal')->with('message', 'User not found.');
else
return Redirect::to('registration#login')->with('message', 'User not found.');
} catch (Cartalyst\Sentry\Groups\GroupNotFoundException $e) {
if(Sentry::check())
return Redirect::to('portal')->with('message', 'Group not found.');
else
return Redirect::to('registration#login')->with('message', 'Group not found.');
}
});
路线 ->
Route::group(array( 'before' => 'Sentry|inGroup:Administrators'), function() {
Route::get('manageusers', array('as' => 'manageusers', 'uses' => 'UserController@viewUsersList'));
});