gpt4 book ai didi

Java双向角色管理

转载 作者:行者123 更新时间:2023-11-29 08:26:18 24 4
gpt4 key购买 nike

我正在设计一些具有用户和团队的 Java 应用程序:

public abstract class AbstractUser()

public class BasicUser extends AbstractUser()

public class AnotherUser extends AbstractUser()

现在我有包含用户的团队:

public abstract class AbstractTeam() {
protected List<AbstractUser> members;
}

public class PublicTeam extends AbstractTeam()

现在我需要管理团队,所以每个用户都应该有一个团队状态,例如成员、版主、管理员、所有者等。

于是想到做一些接口(interface):

public Interface TeamRole

public Interface Member extends TeamRole

public Interface Moderator extends TeamRole

并让 AbsractUser 类实现 TeamRole:

public abstract class AbstractUser implements TeamRole

现在我想做的是:让我们有一个 Controller 来处理删除用户所做的条目:

public boolean deleteEntry(User u, Entry e, requestingUser r) {

}

我怎样才能得到一个干净的表示,这样我就可以做类似的事情:

u.getEntries().removeIf(entry -> entry.equals(e));

以一种干净的方式,而不是在 if 语句中“尝试”所有角色?

更新:这听起来可能不太“好”,但它只是为了描述执行操作时检查权限的问题

最佳答案

首先,Hovercraft Full Of Eels 的说法是正确的,AbstractUser 应该组成 TeamRole 而不是继承它(因为它是“有”关系而不是'是'关系)。

现在开始讨论手头的问题。我不确定我是否完全理解你在问什么,但我假设你在问如何检查 AbstractUser 是否有权(或权利)在不使用 ifswitch 语句来检查。如果是这样,那么这里有一种方法(在我能想到的几种方法中)。创建权限级别的 Enum,每个级别都有一个与权限级别直接相关的序号。下面是一个基本示例:

class enum PermissionLevel {
MEMBER(0),
MODERATOR(1)

private final int level;

PermissionLevel(int level) {
this.level = level;
}

public int getLevel() {
return level;
}
}

现在为 TeamRole 接口(interface)提供一个返回与该角色关联的权限级别的方法

public Interface TeamRole {
PermissionLevel getPermissionLevel();

...
}

现在,当检查成员是否具有权限时,您需要做的就是对 AbstractUser 具有的 TeamRole 权限级别进行整数比较。

if (user.getTeamRole().getPermissionLevel().getLevel() > PermissionLevel.MEMBER.getLevel()) {
// User has permission to do this action
}

关于Java双向角色管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52666363/

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