Plone无法完全识别manage_setLocalRoles更改

时间:2014-10-18 00:29:49

标签: permissions plone roles

我有一个脚本,它使用manage_setLocalRoles为指定的某些用户分配特定角色。请参阅下面的代码段

context.manage_setLocalRoles(username, (‘Editor’, ‘Reviewer’))
context.reindexObjectSecurity()

运行该脚本后,您可以转到页面的“共享”标签,查看指定了ReviewerEditor的用户。但是,该用户没有任何与这些角色一起使用的权限。

为了测试,我进行了以下检查

  • context.getMyRolesInContext()不会返回上面设置的任何角色。
  • context.get_local_roles_for_userid(username)仅显示上面设置的角色,而不显示任何全局角色集(当作为站点管理器等进行测试时)。
  • context.portal_membership.checkPermission(“Modify portal content”)返回False

Editor角色我应该获得Modify portal content权限。我确实在内容类型的工作流程中进行了验证,以确保为每个州的权限正确设置了角色。作为一个仔细检查,我在内容上运行了这个脚本。

username = context.getCurrentUserName()
roles = context.rolesOfPermission('Modify portal content')
member = context.portal_membership.getMemberById(username)
for role in roles:
    if role['selected']!='':
        print role['name']
        print member.has_role(role['name'], context)

return printed

这是我的结果:

Editor
0
Manager
1
Reviewer
0
Site Administrator
0

这些结果来自我的网站管理员角色,但是在我的用户上运行manage_setLocalRoles后添加EditorReviewer

关于角色为何无处不在地被认可的任何想法?或者我使用错误的过程来完成我想要完成的任务?

注意 - 我已经查看了this的答案,而且我的代码反映了我已经在做了它的建议。

编辑

每条评论添加版本。我们有很多附加组件,但它们似乎都不相关。主要是jQuery集成,以及PFG,True Gallery,FullCalendar等类型。我们使用自定义主题和所有自定义内容类型和工作流程。排除我当前为此项目创建的内容类型,主题和所有其他内容类型都是在我到达之前创建的。类型是Archetypes扩展。

  • 操作系统 - 红帽企业Linux服务器版本5.11(Tikanga)
  • Plone - 4.3.2
  • Products.ATContentTypes - 2.1.13
  • AccessControl - 3.0.8

1 个答案:

答案 0 :(得分:0)

问题归结为区分大小写。我们的用户来自Active Directory插件。一些用户名都是大写字母,而其他用户名都是较低的。不知何故,我的set roles命令中使用的用户名始终是小写的。结果,user获得了角色,而它应该是USER

我的解决方案是首先从portal_membership获取实际成员,然后从成员中获取用户名。

pm = getToolByName(self, 'portal_membership')
user = pm.getMemberById(username)
self.manage_setLocalRoles(member.getUserName(), ('Reviewer', 'Editor'))
self.reindexObjectSecurity()

显然getMemberById()不区分大小写,并且在正确的情况下返回正确的用户名。所以我只是错过了额外的检查/过滤器。