ZfcRbac 角色提供者和身份 getRoles()

ZfcRbac Role Provider and Identity getRoles()

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

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

2. 这个接口有 addRolegetRoles 方法并且 getRoles() 应该 return 数组 Rbac\Role\RoleInterface 所以我有一个数组 Rbac\Role\RoleInterface

3. 我从自定义模型中获取角色,并在验证用户

时通过 addRole() 将角色添加到 User 实体

4. Rbac\Role\RoleInterfacehasPermission() 方法,其中 return 角色的权限

总结: 身份验证后,我获得了经过身份验证的 User 身份信息、角色和每个角色的权限。为什么我需要另一个 RoleProvider 并在其中列出我的所有角色?我错过了什么?

如您所见in the php doc in the IdentityInterface getRoles() 方法可以return 两件事:

1. 一个字符串数组

2. Rbac\Role\RoleInterface

的数组

如果你 return 一个字符串数组,你需要一个额外的 RoleProvider 到 "translate" 字符串到 Rbac\Role\RoleInterface 的实际实例。如果你 return 一个 Rbac\Role\RoleInterface 的数组,在我看来你不再需要 RoleProvider.

在我看来,角色提供程序不是用于生成用户角色列表,而是用于加载和构建可访问的应用程序角色列表,这些角色具有在授权服务期间和授权服务中使用的权限。

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

我仍然需要为访问用户角色和存储要授权的用户角色编写代码。使用 AuthenticationServiceIdentityInterface 加载用户角色的示例并不多,角色提供者的加载似乎有据可查。我正在尝试将身份验证与授权分离。我进行身份验证,然后在我的授权模块中加载用户的角色,因为我可能会遇到这样的情况,即只需要进行身份验证,而加载来宾角色是开销。