gpt4 book ai didi

java - 如何为多用户 Java 应用程序设计/保留用户角色(当前和已注册)?

转载 作者:行者123 更新时间:2023-11-29 13:39:50 24 4
gpt4 key购买 nike

我正在构建一个应用程序,允许每个用户选择是否要注册为玩家,也可以选择注册为管理员。他们可以同时注册为玩家和管理员,但只能拥有一个当前角色 -> 即只能在给定时间以玩家/管理员身份登录。

我正在使用 Player-Role 模式,其中 Player 和 Admin 类扩展抽象的 UserRole 类。

我应该创建什么样的表结构来支持这一点:

  • 我可以存储用户注册的角色列表
  • 我可以按需存储和检索用户的当前用户角色

例如,我想让数据库支持以下代码,以在 Player.getRole() 中获取用户的当前角色,并在 Admin.getRole() 中获取一个类似的角色:

        User userWithID = User.getUser(userWithID);
UserRole playerRole = null;
List<UserRole> userRoles = userWithID.getRoles();
for(UserRole role : userRoles){
if(role instanceof Player){
playerRole = role;
break;
}
}
if(playerRole == null) throw new IllegalAccessError("Player with ID does not exist");
else{
return (Player) playerRole;
}



问题出现了,我需要来自用户角色的两种信息。 1- 注册的角色,和 2- 当前角色。而 UserRole 是抽象的。

注意:在将其标记为重复之前:StackOverflow 上的所有其他问题都没有指示如何为用户获取当前用户角色的答案,或者没有在此域模型下指定的实现。

最佳答案

自从您标记了 ,我将展示一个可能的表格设计:

CREATE TABLE users (
user_id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
...
);

CREATE TABLE roles (
role_id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
...
);

CREATE TABLE user_has_role (
user_id bigint REFERENCES users NOT NULL,
role_id bigint REFERENCES roles NOT NULL,
PRIMARY KEY (user_id, role_id)
);

CREATE TABLE current_role (
user_id bigint PRIMARY KEY REFERENCES users,
role_id NOT NULL,
FOREIGN KEY (user_id, role_id) REFERENCES user_has_role
);

前三个表包含静态信息,第四个我们在用户登录时更新。

关于java - 如何为多用户 Java 应用程序设计/保留用户角色(当前和已注册)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57067535/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com