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

时间:2015-03-10 08:39:11

标签: zend-framework2 identity roleprovider rbac zfc-rbac

使用ZfcRbac时,我无法理解这个概念。

1。我使用自己的User实体来实施ZfcRbac\Identity\IdentityInterface

2。此界面包含addRolegetRoles方法,getRoles()应返回Rbac\Role\RoleInterface数组,因此我有一个{{1}数组1}}

3。我从自定义模型中获取角色,并在对用户进行身份验证时通过Rbac\Role\RoleInterfaceUser实体添加角色

4. addRole()使用Rbac\Role\RoleInterface方法返回角色的权限

要点: 身份验证后,我为每个角色提供了经过身份验证的hasPermission()身份信息,角色和权限。为什么我需要另一个User并列出我的所有角色?我错过了什么?

2 个答案:

答案 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

我仍然需要编写访问用户角色和存储要授权的用户角色的代码。使用AuthenticationServiceIdentityInterface加载用户角色的示例并不多,而且角色提供程序的加载似乎已有详细记录。我试图将身份验证与授权分离。我进行身份验证,然后在我的授权模块中加载用户的角色,因为我可能会遇到必须进行身份验证以及加载guest角色的开销。