获取用户权限
当角色根据 LDAP 进行同步时,按照下列步骤获取:
-
从用户所属的分组获取角色
生成的授权由用户所属的分组组成。默认情况下,使用分组的
cn
属性获取权限名称。可以通过 jmix.ldap.group-role-attribute 应用程序属性更换成其他属性。 -
从用户的属性获取角色
用户角色还可以基于其自身的属性添加。
注册一个 Spring bean,实现
LdapUserAdditionalRoleProvider
接口,在 bean 内实现`getAdditionalRoles()` 方法。示例:@Component("demo_MyLdapUserAdditionalRoleProvider") public class MyLdapUserAdditionalRoleProvider implements LdapUserAdditionalRoleProvider { @Override public Set<GrantedAuthority> getAdditionalRoles(DirContextOperations user, String username) { return new HashSet<>(); } }
-
使用默认角色
jmix.ldap.default-roles 应用程序属性包含以逗号分隔的一组角色,这些角色会默认分配给每个使用 LDAP 认证的用户。
生成的授权列表会传递给 JmixLdapGrantedAuthoritiesMapper
以获取最终的权限集合。这个映射器将之前获取的授权映射为 Jmix 的 GrantedAuthority
。
例如,假设初始的列表中只包含一个简单的授权,值为 Administrators
。首先,映射器会尝试查找具有相同角色编码的资源角色。如果没找到,则尝试查找具有相同编码的行级角色。如果仍未找到,则此角色不会添加至最终的列表。
你可以自己实现 LdapAuthorityToJmixRoleCodesMapper
接口,将 LDAP 授权和 Jmix 角色编码进行映射。可以将多个 Jmix 角色编码映射至一个 LDAP 分组,角色可以是资源角色或行级角色。
下面示例中,bean 实现了将 mathematician
和 scientists
LDAP 分组映射至 Jmix 角色编码:
@Component("l_CustomAuthorityMapperBean")
public class CustomAuthorityMapperBean implements LdapAuthorityToJmixRoleCodesMapper {
@Override
public Collection<String> mapAuthorityToJmixRoleCodes(String authority) { (1)
Collection<String> roleCollection = new ArrayList<>();
if (authority.equals("mathematicians")) { (2)
roleCollection.add("system-full-access");
} else {
roleCollection.add(authority + "-resource-role"); (3)
roleCollection.add(authority + "-row-level-role");
}
return roleCollection;
}
}
1 | 重写方法,方法接收 LDAP 授权作为输入参数,返回与其匹配的一组角色编码。 |
2 | 对于 mathematicians 分组,LDAP 用户可以获得 system-full-access 角色。 |
3 | 对于 scientists 分组,LDAP 用户可以获得两个角色:scientists-resource-role 和 scientists-row-level-role 。 |
本页是否有帮助?
感谢您的反馈