gpt4 book ai didi

java - 检查用户是否被另一个用户阻止的最佳位置

转载 作者:行者123 更新时间:2023-12-01 15:29:31 26 4
gpt4 key购买 nike

如果我想引入阻止用户的概念,在不违反良好设计原则的情况下,最合适的地方是检查用户是否被阻止?

到目前为止,我一直在使用 Spring Security 来注释 Controller 方法,以了解特定用户是否有权执行特定操作。有了这个被阻止的用户的事情,事情就变得有点复杂了。我应该尝试再次将其放入 Controller 中(可能再次使用 Spring 安全性)还是我应该让域对象自行决定?

我想最好将其留在 Controller 级别,但我担心有一天我的 Controller 不会变成 if...else 困惑。

最佳答案

一种方法可能是引入名为“BLOCKED”的角色,当所有用户被阻止时将其分配给所有用户,并注释所有不允许被阻止的用户访问它们的方法:

@PreAuthorize("!hasRole('BLOCKED')")
public void secureMethod();

另一种方法是将阻止状态存储在用户数据库或其他存储中。然后扩展UserDetailsService返回附加用户信息,包括“阻止”标志。并且再次使用安全 EL 来过滤不允许被阻止的用户执行它们的方法:

@PreAuthorize("!principal.blocked")
public void secureMethod();

更新:

您在评论中提到的问题可以通过类似的方式解决:

@PreAuthorize("!#photo.owner.blockedUsers.contains(principal.name)")
public void likePhoto(Photo photo);

对于任何更复杂和/或通用的规则,我建议使用 AOP 方面来保持代码干净,避免出现过多的 if。

关于java - 检查用户是否被另一个用户阻止的最佳位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9728698/

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