2015-02-10 116 views
0

如何使用zfc rbac角色提供程序?什么是角色提供者?

我知道警卫阻止用户访问路线,但它似乎也需要角色提供者。这些数据库权限?在下面的例子中,'article'是一个控制器,''后面是部分。该控制器授予的许可?我怎样才能测试一次到位?非常感谢。

return [ 
    'zfc_rbac' => [ 
     'role_provider' => [ 
      'ZfcRbac\Role\InMemoryRoleProvider' => [ 
       'admin' => [ 
        'permissions' => [ 
         'article.delete', 
         'article.edit', 
         'article.archive', 
         'article.read' 
        ] 
       ], 
       'member' => [ 
        'permissions' => [ 
         'article.edit', 
         'article.archive', 
         'article.read' 
        ] 
       ], 
       'guest' => [ 
        'permissions' => ['article.read'] 
       ] 
      ] 
     ] 
    ] 
]; 

回答

0

Here you can read about role providers

在ZF-RBAC一个身份可以有不同的权限/特权不同的角色。要收集authorizationService的角色,您需要角色提供者。他们将包括一个RoleProvicerInterface (link)getRoles方法,该方法应该返回授权服务必须处理的角色。

每个标识都有一个IdentityInterface (link),它也有一个getRoles方法。这将返回一个roleNames的数组,该数组将被映射到来自RolesProvider的角色以查找有关权限/特权的信息。

然后,您可以找出当前用户(标识)允许执行的操作。

+0

我了解角色并设置了我的警戒阻滞剂(基于我在数据库中设置的用户角色)。在我目前的情况下,每个用户都有一个角色,并且我为每个角色类型开发了模块。它目前作为'foo角色'不能访问'bar模块'。然而,当重新阅读文档时,似乎我需要角色提供者以及防守阻挡者。你可以扩展上面的语法吗? '文章'是控制者还是行动? – Matt 2015-02-11 15:30:18

+0

还是这些基本的权限?例如,如果guest有'article.read',它们只能从数据库中读取,并且不能写入或编辑记录? – Matt 2015-02-11 15:39:24

+0

@Matt我认为这是完全取决于你是否权限映射到控制器或行动或任何。在这种情况下,我认为这个例子是针对资源控制器('article')和控制器内部的动作('delete','edit','archive'和'read')。 – Wilt 2015-02-11 15:53:53