使用ZfcRbac
时,我无法理解这个概念。
1。我使用自己的User
实体来实施ZfcRbac\Identity\IdentityInterface
2。此界面包含addRole
和getRoles
方法,getRoles()
应返回Rbac\Role\RoleInterface
数组,因此我有一个{{1}数组1}}
3。我从自定义模型中获取角色,并在对用户进行身份验证时通过Rbac\Role\RoleInterface
向User
实体添加角色
4. addRole()
使用Rbac\Role\RoleInterface
方法返回角色的权限
要点:
身份验证后,我为每个角色提供了经过身份验证的hasPermission()
身份信息,角色和权限。为什么我需要另一个User
并列出我的所有角色?我错过了什么?
答案 0 :(得分:1)
正如您所见in the php doc in the IdentityInterface
getRoles()
方法可以返回两件事:
1。字符串数组
2。 Rbac\Role\RoleInterface
如果您返回一个字符串数组,则需要额外RoleProvider
将字符串“翻译”为Rbac\Role\RoleInterface
的实际实例。如果您返回Rbac\Role\RoleInterface
数组,我觉得您不再需要RoleProvider
。
答案 1 :(得分:1)
在我看来,角色提供程序不是用于生成用户角色列表,而是用于加载和构建可访问的应用程序角色列表,其中包含在授权服务期间和授权服务中使用的权限。
所以我正在扩展Zend\Authentication\AuthenticationService
所以我可以实现getRoles()
的抽象方法ZfcRbac\Identity\IdentityInterface
。
我仍然需要编写访问用户角色和存储要授权的用户角色的代码。使用AuthenticationService
或IdentityInterface
加载用户角色的示例并不多,而且角色提供程序的加载似乎已有详细记录。我试图将身份验证与授权分离。我进行身份验证,然后在我的授权模块中加载用户的角色,因为我可能会遇到必须进行身份验证以及加载guest角色的开销。