2

我正在尝试使用哨兵实现我的访问控制,但我发现文档不够清晰。我需要帮助的几件事:

我用这个创建了一个组“测试员”:

$group = Sentry::createGroup(
        array(
            'name'        => Input::get('txtGroupName'),
            'description' => Input::get('description'),
            'permissions' => Input::get('permissions'),
            'tenant_id'   => Sentry::getUser()->tenant_id,  
        ));

上面的 Input::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);

如果我做错了,或者需要更改某些内容,将不胜感激。

4

1 回答 1

0

这就是它应该工作的方式,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  
  ));
于 2014-03-31T08:56:45.827 回答