用户
用户实体
-
getUsername()
返回唯一用户名。 -
getPassword()
返回加密(hash)后的用户密码。 -
isEnabled()
、isAccountNonExpired()
、isAccountNonLocked()
、isCredentialsNonExpired()
表示用户是否可以登录系统。 -
getAuthorities()
、setAuthorities()
,在登录时框架用于为用户设置权限。
用户保存在应用程序的主数据库中。默认情况下,User
实体和对应的数据库表具有以下属性:
-
id
、version
是标准的主键和乐观锁属性。 -
username
、password
、enabled
保存JmixUserDetails
接口中方法返回的值。 -
email
、firstName
、lastName
保存用户的其他属性。
你可以定义应用程序所需的任意数量的附加属性,例如,department
或 position
。
用户管理
一个新项目包含 010-init-user.xml
数据库迁移 脚本,该脚本创建用户名/密码为 admin
/ admin
的用户,通过给实体分配 system-full-access
角色 授予对系统的完全访问权限。
一个新项目还包含用于管理用户的 UI 界面,请查看主菜单的 Application → Users(用户)。这些界面支持创建、编辑和删除用户,以及更改和重置用户密码。如需为用户分配角色,点击用户浏览界面中的 Role assignments(角色分配) 按钮。
框架提供了 ui-minimal 角色,该角色授予登录 UI 和使用一些常见 UI 元素的权限。新用户需要分配此角色才能与基础 UI 进行交互,否则他们将无法登录。
|
内置用户
任何具有标准安全子系统的 Jmix 应用程序都有两个内置的用户对象:
-
Anonymous 匿名用户,对应于无认证信息的用户。支持在用户未登录时授予某些权限。
-
System 系统管理员用户,系统授权 机制需要此用户对象。当没有真正的用户与应用程序交互时使用该用户,例如,当应用程序启动时,或者当计划任务执行业务方法时。
内置用户对象没有保存在数据库,而是在应用程序启动时由 DatabaseUserRepository
类创建。可以在此类的 initAnonymousUser()
和 initSystemUser()
方法中对这两个用户进行定制化。默认情况下,系统用户具有 system-full-access
角色,因此拥有所有权限。
匿名用户默认没有权限。为匿名用户授予权限的示例代码可以参考 匿名访问界面 部分。
替代用户
如需实际看看这些功能,请按照下列步骤:
-
以
admin
用户登录,创建至少一个用户,并分配UI: minimal access
角色。 -
在 Users(用户) 表选择
admin
,然后点击 Additional(更多) → User substitution(用户替代)。可以看到admin
已经能替代的用户列表。 -
将新用户添加至
admin
能替代的用户列表中。 -
现在可以看到主界面的
userIndicator
组件从显示当前用户名变成了一个包含可替代用户的下拉列表。如果选择一个替代用户,工作区会发生变化,就像重新用替代用户登录一样。但是所有的审计功能仍然使用实际登录用户admin
。
CurrentUserSubstitution
bean 可用于获取当前替代的用户、已认证用户或有效用户(在发生替代时为替代用户,否则为认证用户)。
示例:
@Autowired
private CurrentUserSubstitution currentUserSubstitution;
private String getSubstitutedUserName() {
User substitutedUser = (User) currentUserSubstitution.getSubstitutedUser();
return substitutedUser == null ? "" : substitutedUser.getUsername();
}
-
CurrentAuthentication.getUser()
方法总是返回认证用户。 -
CurrentAuthentication.getAuthentication().getAuthorities()
返回有效用户的授权。即,在替代时,这些授权与认证用户的授权不一致。