我正在尝试使用哨兵实现我的访问控制,但我发现文档不够清晰。我需要帮助的几件事:
我用这个创建了一个组"测试员":
$group = Sentry::createGroup(
array(
'name' => Input::get('txtGroupName'),
'description' => Input::get('description'),
'permissions' => Input::get('permissions'),
'tenant_id' => Sentry::getUser()->tenant_id,
));
上面的输入::get('permissions')采用以下格式:
Array
(
[members.create] => 1
[members.read] => 1
[members.update] => 1
[members.delete] => 1
[roles.create] => 0
[roles.read] => 0
[roles.update] => 0
[roles.delete] => 0
)
现在,当我查看我的数据库组表时,我只得到了这个:
{"members.create":1,"members.read":1,"members.update":1,"members.delete":1}
结果,当我来检查具有以下测试人员角色的用户权限时,我得到的是真的,用户具有访问权限。
$user = Sentry::getUser();
$hasAccess = $user->hasAccess('roles.create');
var_dump($hasAccess);
如果我做错了,或者需要更改某些内容,将不胜感激。
这就是它应该工作的方式,afaik。我唯一建议的是将哨兵许可作为过滤器应用,如下所示:
Route::filter('role.create', function(){
$user = Sentry::getUser();
if ( !$user || !Sentry::getUser()->hasAccess('roles.create') ) {
return Redirect::route('whatever')->with('warning', 'yout cant create roles');
//or something more relevant to your app
}
});
并且很可能在路由中使用该过滤器
Route::any('user/create', array('before' => 'role.create', 'as' => 'named.route',
//return stuff
));