管理员角色定义了以下两项内容:一组权能和一个控制范围。(术语控制范围是指一个或多个受管理的组织。)在定义管理员角色后,即可将其分配给一个或多个管理员。
不要将角色和管理员角色相混淆。角色用于管理最终用户对外部资源的访问权限,而管理员角色主要用于管理 Identity Manager 管理员对 Identity Manager 对象的访问权限。
本节中介绍的信息仅限于管理员角色。有关角色的信息,请参见了解和管理角色。
可以将多个管理员角色分配给单个管理员。这可使管理员在一个控制范围内具有一组权能,而在另一个控制范围内具有另外一组权能。例如,某个管理员角色可能会向管理员授予为该管理员角色中指定的受控组织创建和编辑用户的权限。不过,分配给同一管理员的第二个管理员角色可能仅授予以下权限:在该管理员角色定义的另一组受控组织中更改用户密码。
通过使用管理员角色,可以重复使用权能和控制范围对。管理员角色还简化了包含大量用户的环境中的管理员权限管理工作。应使用管理员角色授予管理员权限,而不是直接将权能和受控组织分配给各个用户。
可以直接或动态(间接)地将权能和/或组织分配给管理员角色。
直接。使用此方法可以将权能和/或受控组织明确分配给管理员角色。例如,可以将用户报告管理员权能和受控组织 Top 分配给某个管理员角色。
动态(间接)。此方法使用规则来分配权能和受控组织。每次分配了管理员角色的管理员登录时,都会评估这些规则。在管理员通过验证后,这些规则将动态地确定分配哪些权能和/或受控组织。
例如,当用户登录时:
如果其 Active Directory (Active Directory, AD) 用户角色为管理员,则权能规则可能返回“帐户管理员”作为要分配的权能。
如果其 Active Directory (Active Directory, AD) 用户部门为营销部,则受控组织规则可能返回“营销部”作为要分配的受控组织。
可以为每个登录界面(例如用户界面或管理员界面)启用或禁用将管理员角色动态分配给用户的操作。要执行此操作,请将以下系统配置属性设置为 true 或 false:
security.authz.checkDynamicallyAssignedAdminRolesAtLoginTo.logininterface
所有界面的默认值为 false。
有关编辑系统配置对象的说明,请参见编辑 Identity Manager 配置对象。
Identity Manager 提供了可用于为管理员角色创建规则的示例规则。您可以在 Identity Manager 安装目录的 sample/adminRoleRules.xml 中找到这些规则。
表 6–1 提供了这些规则名称以及必须为每个规则指定的 authType。
表 6–1 管理员角色示例规则
规则名称 |
authType |
---|---|
受控组织规则 |
ControlledOrganizationsRule |
权能规则 |
CapabilitiesRule |
向用户分配管理员角色规则 |
UserIsAssignedAdminRoleRule |
有关为服务提供者用户管理员角色提供的示例规则的信息,请参见第 17 章中的服务提供者用户的委托管理。
Identity Manager 中包括名为“用户管理员角色”的内置管理员角色。默认情况下,该管理员角色不具有任何分配的权能或受控组织分配。无法将其删除。在登录时,此管理员角色将被隐含分配给所有用户(最终用户和管理员),而不管用户登录到何种界面(例如用户界面、管理员界面、控制台或 Identity Manager IDE)。
有关为服务提供者用户创建管理员角色的信息,请参见第 17 章中的服务提供者用户的委托管理。
可以通过管理员界面编辑用户管理员角色(选择“安全性”,然后再选择“管理员角色”)。
因为通过这种管理员角色静态分配的所有权能或受控组织都将分配给所有用户,所以建议通过规则来分配权能和受控组织。这会使不同的用户能够拥有不同的权能或没有权能,分配范围将取决于用户身份、所属部门或是否为管理人员,可以在规则的上下文中查询这些信息。
用户管理员角色不会使工作流中使用的 authorized=true 标志过时,也不会取而代之。对于工作流(正在执行的工作流除外)所访问的对象,如果用户不拥有访问权限,这种标志将仍然适用。这本质上是使用户可以进入以超级用户身份运行模式。
不过,在某些情况下,用户应对工作流外的一个或多个对象拥有特定访问权限(并且可能对工作流内的一个或多个对象拥有这种权限)。在这些情况下,通过使用规则动态分配权能和受控组织可以实现对这些对象进行细化授权。
要创建或编辑管理员角色,您必须分配有“管理员角色管理员”权能。
要在管理员界面中访问管理员角色,请单击“安全性”,然后单击“管理员角色”选项卡。“管理员角色”列表页允许您为 Identity Manager 用户和服务提供者用户创建、编辑和删除管理员角色。
要编辑现有管理员角色,请单击列表中的名称。单击“新建”以创建管理员角色。Identity Manager 将显示“创建管理员角色”的各个选项(如图 6–3 中所示)。“创建管理员角色”视图显示了四个选项卡,您可以使用这些选项卡指定常规属性、权能和新管理员角色的范围以及向用户的角色分配。
使用创建管理员角色或编辑管理员角色视图中的“常规”选项卡可指定管理员角色的以下基本特性:
名称。此管理员角色的唯一名称。
例如,您可能要为对财务部(或组织)中的用户具有管理权能的用户创建财务管理员角色。
类型。选择“身份对象”或“服务提供者用户”作为类型。此字段为必填字段。
如果为 Identity Manager 用户(或对象)创建管理员角色,请选择“身份对象”。如果创建管理员角色以向服务提供商用户授予访问权限,请选择“服务提供者用户”。
有关创建管理员角色以向服务提供者用户授予访问权限的信息,请参见第 17 章中的服务提供者用户的委托管理。
分配者。选择或搜索允许其将此管理员角色分配给其他用户的用户。可供您选择的一组用户包括已经分配了“分配权能”权限的用户。
如果未选择任何用户,则唯一可以分配此管理员角色的用户为该管理员角色的创建者。如果尚未将“分配用户权能”权能分配给创建管理员角色的用户,请选择一个或多个用户作为分配者,以确保至少一个用户能够将管理员角色分配给其他用户。
组织。选择可使用此管理员角色的一个或多个组织。此字段为必填字段。
该管理员可管理已分配组织以及在分层结构中处于该组织之下的任何组织中的对象。
Identity Manager 允许您控制哪些用户在最终用户的控制范围之内。
使用“控制范围”选项卡(如图 6–4 中所示)可指定此组织的成员可管理的组织,也可以指定用于确定由管理员角色用户管理的组织的规则,以及选择管理员角色的用户表单。
受控组织。从“可用组织”列表中选择此管理员角色有权管理的组织。
受控组织规则。选择在用户登录时评估的规则,以确定由分配了此管理员角色的用户所控制的组织的个数(零个或多个)。选定的规则必须具有 ControlledOrganizationsRule authType。默认情况下,将选择 "No Controlled Organization Rule"。
可以根据组织需要,使用 EndUserControlledOrganizations 规则来定义所需的逻辑,以确保为委托提供正确的用户集。
如果希望管理员的用户范围列表始终相同(无论他们登录到管理员界面还是最终用户界面),则必须更改 EndUserControlledOrganizations 规则。
修改此规则,使其首先检查验证用户是否为管理员,然后再配置以下内容:
如果该用户不是管理员,则返回应由最终用户控制的组织集,如用户自己的组织(如 waveset.organization)。
如果该用户是管理员,则不返回任何组织,这样用户将只控制已分配的组织(因为用户是管理员)。
例如:
<Rule protectedFromDelete=’true’ authType=’EndUserControlledOrganizationsRule’ id=’#ID#End User Controlled Organizations’ name=’End User Controlled Organizations’> <Comments> If the user logging in is not an Idm administrator, then return the organization that they are a member of. Otherwise, return null. </Comments> <cond> <and> <isnull><ref>waveset.adminRoles</ref></isnull> <isnull><ref>waveset.capabilities</ref></isnull> <isnull><ref>waveset.controlledOrganizations</ref></isnull> </and> <ref>waveset.organization</ref> </cond> <MemberObjectGroups> <ObjectRef type=’ObjectGroup’ id=’#ID#Top’ name=’Top’/> </MemberObjectGroups> </Rule> |
如果用户或管理员属于动态组织,则不会在搜索结果中返回他们。
不过,您可以创建规则以返回动态组织中的用户。通过在 Idm 模式配置对象中定义的 Identity Manager 用户模式定义中添加新属性来更改以下示例规则,导入该对象,然后重新启动 Identity Manager 服务器。
<IDMAttributeConfigurations> ... <IDMAttributeConfiguration name='region' syntax='STRING' description='region of the country'/> </IDMAttributeConfigurations> <IDMObjectClassConfigurations> ... <IDMObjectClassConfiguration name='User' extends='Principal' description='User description'> ... <IDMObjectClassAttributeConfiguration name='region' queryable='true'/> </IDMObjectClassConfiguration> </IDMObjectClassConfigurations> Next, import the following Identity Manager objects: <!-- User member rule that will include all users whose region attribute matches the region organization display name --> <Rule name="Region User Member Rule" authType="UserMembersRule"> <Description>User Member Rule</Description> <list> <new class='com.waveset.object.AttributeCondition'> <s>region</s> <s>equals</s> <ref>userMemberRuleOrganizationDisplayName</ref> </new> </list> <MemberObjectGroups> <ObjectRef type="ObjectGroup" id="#ID#All" name="All"/> </MemberObjectGroups> </Rule> <!-- North & South Region organizations with user member rule assigned --> <ObjectGroup id='#ID#North Region' name='North Region' displayName='North Region'> <UserMembersRule cacheTimeout='3600000'> <ObjectRef type='Rule' name='Region User Member Rule'/> </UserMembersRule> <MemberObjectGroups> <ObjectRef type='ObjectGroup' name='Top' id='#ID#Top'/> </MemberObjectGroups> </ObjectGroup> <ObjectGroup id='#ID#South Region' name='South Region' displayName='South Region'> <UserMembersRule cacheTimeout='3600000'> <ObjectRef type='Rule' name='Region User Member Rule'/> </UserMembersRule> <MemberObjectGroups> <ObjectRef type='ObjectGroup' name='Top' id='#ID#Top'/> </MemberObjectGroups> </ObjectGroup> <!-- Organization containing all employees --> <ObjectGroup id='#ID#Employees' name='Employees' displayName='Employees'> <MemberObjectGroups> <ObjectRef type='ObjectGroup' name='Top' id='#ID#Top'/> </MemberObjectGroups> </ObjectGroup> <!-- End user controlled organization rule that give each user control of the regional organization they are a member of --> <Rule protectedFromDelete='true' authType='EndUserControlledOrganizationsRule' id='#ID#End User Controlled Organizations' name='End User Controlled Organizations' primaryObjectClass='Rule'> <switch> <ref>waveset.attributes.region</ref> <case> <s>North Region</s> <s>North Region</s> </case> <case> <s>South Region</s> <s>South Region</s> </case> <case> <s>East Region</s> <s>East Region</s> </case> <case> <s>West Region</s> <s>West Region</s> </case> </switch> <MemberObjectGroups> <ObjectRef type='ObjectGroup' id='#ID#Top' name='Top'/> </MemberObjectGroups> </Rule> <!-- 4 employees (2 in North and 2 in South region) --> <User name='emp1' primaryObjectClass='User' asciipassword='1111'> <Attribute name='firstname' type='string' value='Employee'/> <Attribute name='fullname' type='string' value='Employee One'/> <Attribute name='lastname' type='string' value='One'/> <Attribute name='region' type='string' value='North Region'/> <MemberObjectGroups> <ObjectRef type='ObjectGroup' id='#ID#Employees' name='Employees' displayName='Employees'/> </MemberObjectGroups> </User> <User name='emp2' primaryObjectClass='User' asciipassword='1111'> <Attribute name='firstname' type='string' value='Employee'/> <Attribute name='fullname' type='string' value='Employee Two'/> <Attribute name='lastname' type='string' value='Two'/> <Attribute name='region' type='string' value='North Region'/> <MemberObjectGroups> <ObjectRef type='ObjectGroup' id='#ID#Employees' name='Employees' displayName='Employees'/> </MemberObjectGroups> </User> <User name='emp4' primaryObjectClass='User' asciipassword='1111'> <Attribute name='firstname' type='string' value='Employee'/> <Attribute name='fullname' type='string' value='Employee Four'/> <Attribute name='lastname' type='string' value='Four'/> <Attribute name='region' type='string' value='South Region'/> <MemberObjectGroups> <ObjectRef type='ObjectGroup' id='#ID#Employees' name='Employees' displayName='Employees'/> </MemberObjectGroups> </User> <User name='emp5' primaryObjectClass='User' asciipassword='1111'> <Attribute name='firstname' type='string' value='Employee'/> <Attribute name='fullname' type='string' value='Employee Five'/> <Attribute name='lastname' type='string' value='Five'/> <Attribute name='region' type='string' value='South Region'/> <MemberObjectGroups> <ObjectRef type='ObjectGroup' id='#ID#Employees' name='Employees' displayName='Employees'/> </MemberObjectGroups> </User> |
接下来,通过 Identity Manager 最终用户界面以 emp1(位于北部地区)身份登录。选择“委托”->“新建”。将搜索->提供条件更改为开头为,将该值更改为 emp,然后选择“查找”。进行此选择将会在可用用户列表中返回 emp2。
受控组织用户表单。选择分配了此管理员角色的用户在创建或编辑属于此管理员角色受控组织的用户时使用的用户表单。默认情况下,不会选择任何“受控组织用户表单”。
通过管理员角色分配的用户表单将覆盖从该管理员所在组织继承的任何用户表单。不会覆盖直接分配给该管理员的用户表单。
分配给管理员角色的权能将确定已分配管理员角色的用户所具有的管理权限。例如,此管理员角色可能被限制为仅为管理员角色的受控组织创建用户。这种情况下,可以分配创建用户权能。
在“权能”选项卡中,请选择以下选项:
权能。这些为管理员角色的用户对其受控组织所具有的特定权能(管理权限)。从可用权能列表中选择一个或多个权能,并将其移动到“已分配的权能”列表。
权能规则。选择在用户登录时评估的规则,以确定向分配了管理员角色的用户授予的权能(零个或多个)的列表。选定的规则必须具有 CapabilitiesRule authType。
您可为某个管理员角色的成员指定用户表单。使用创建管理员角色或编辑管理员角色视图中的 "Assign To Users" 选项卡可指定分配。
分配了管理员角色的管理员在该管理员角色所控制的组织中创建或编辑用户时,将会使用此用户表单。通过管理员角色分配的用户表单将覆盖从该管理员所在组织继承的任何用户表单。该用户表单不会覆盖直接分配给该管理员的用户表单。
将按以下优先级顺序来决定编辑用户时使用的用户表单:
如果用户表单是直接分配给该管理员的,则使用该表单。
如果没有直接为管理员分配用户表单,但为管理员分配了管理员角色,且该管理员角色控制管理员创建或编辑的用户所属的组织并指定了一个用户表单,则使用该用户表单。
如果没有直接为管理员分配用户表单,也没有通过管理员角色间接为其分配用户表单,则使用分配给该管理员的成员组织的用户表单(优先顺序从管理员的成员组织开始,直到 Top 的下一级)。
如果管理员的成员组织没有分配用户表单,则使用默认用户表单。
如果为该管理员分配了多个管理员角色,这些角色控制相同的组织,但指定不同的用户表单,则在管理员尝试创建或编辑这些组织中的用户时会显示错误消息。如果管理员尝试分配两个或多个管理员角色,这些角色控制相同的组织,但指定不同的用户表单,则会显示错误消息。如果未解决此冲突,则不能保存变更。