Zend framework2 ZfcRbac角色提供程序和标识getRoles()

Zend framework2 ZfcRbac角色提供程序和标识getRoles(),zend-framework2,identity,roleprovider,rbac,zfc-rbac,Zend Framework2,Identity,Roleprovider,Rbac,Zfc Rbac,使用时我无法理解一个概念 1.我使用自己的用户实体实现ZfcRbac\Identity\IdentityInterface 2.这个接口有addRole和getRoles方法,getRoles()应该返回Rbac\Role\RoleInterface的数组,所以我有一个Rbac\Role\RoleInterface 3.我从自定义模型中获取角色,并在验证用户时通过addRole()将角色添加到User实体 4.Rbac\Role\RoleInterface具有返回角色权限的hasPermissi

使用时我无法理解一个概念

1.我使用自己的
用户
实体实现
ZfcRbac\Identity\IdentityInterface

2.这个接口有
addRole
getRoles
方法,
getRoles()
应该返回
Rbac\Role\RoleInterface
的数组,所以我有一个
Rbac\Role\RoleInterface

3.我从自定义模型中获取角色,并在验证用户时通过
addRole()
将角色添加到
User
实体

4.
Rbac\Role\RoleInterface
具有返回角色权限的
hasPermission()
方法

总结: 身份验证后,我拥有已验证的
用户
身份信息、角色和每个角色的权限。为什么我需要另一个
RoleProvider
并列出我在其中的所有角色?我缺少什么?

正如您所看到的那样,
getRoles()
方法可以返回两件事:

1.字符串数组

2.一组
Rbac\Role\RoleInterface


如果返回字符串数组,则需要额外的
RoleProvider
,将字符串“转换”为
Rbac\Role\RoleInterface
的实际实例。如果您返回一个
Rbac\Role\RoleInterface
数组,我认为您不再需要
RoleProvider

角色提供程序,我认为角色提供程序不用于生成用户角色列表,而是加载并构建一个可访问的应用程序角色列表,该列表具有在授权服务期间和授权服务中使用的权限

因此,我正在扩展
Zend\Authentication\AuthenticationService
,以便实现
ZfcRbac\Identity\IdentityInterface
的抽象方法
getRoles()


我仍然需要为访问用户角色和存储要授权的用户角色编写代码。使用
AuthenticationService
IdentityInterface
加载用户角色的示例不多,而且角色提供程序的加载似乎有很好的文档记录。我正在尝试将身份验证与授权分离。我进行身份验证,然后在授权模块中加载用户的角色,因为在某些情况下,身份验证是所有必要的,而加载来宾角色是开销

非常感谢您的回答,我决定将我的角色提供者保留在用户实体中。因此,我不会使用角色提供程序,但如果您未设置任何角色提供程序,zfcrbac将显示“未为zfcrbac设置角色提供程序”错误。我该怎么处理呢?不确定。。。也许您仍然可以设置一个
ObjectRepositoryRoleProvider
,指向您的条令
角色
实体,如前所述。最后,我认为如果您的身份保持
RoleInterface
,则不会使用它,但至少它指向了正确的源。我尝试了这个“角色\u提供者”=>['ZfcRbac\role\InMemoryRoleProvider'=>[''=>['=>[],]],我认为最好确保您指定的
RoleProvider
最终返回您在身份中实际使用的角色列表。这是更一致的。。。