我目前正在构建一个我需要添加权利的Java财务应用程序,并且想知道人们采取了哪些方法来解决这个问题,以及是否有人会推荐的第三方Java库。
目前,我有许多用户可以大致分类为角色(例如“交易员”)。每个角色可以拥有与之相关的零个或多个权限(例如“创建交易”)。
设计决策:
拥有更多一般权限(例如“交易”)以及附带的操作(“创建”,“更新”,“删除”)或更具描述性的权限(“例如”创建交易“)是否更好?
对某些权限进行参数化的事实进行建模有什么好方法(例如,用户X有权限“创建交易”但仅限于在LSE上交易的股票)?我以前看过这个名字 - 值对,但这看起来相当丑陋。我唯一的想法是将Permission实现为访问者(请参阅下面的示例代码),但我担心界面可能变得难以操作(因为#business对象增加了)。
public interface Permission {
void checkPermission(Trade trade) throws SecurityPermission;
void checkPermission(AnotherBusinessObject obj) throws SecurityPermission;
}
public class ExchangePermission implements Permission {
private final Exchange exchange;
public void checkPermission(Trade trade) {
if (!exchange.equals(trade.getExchange())) {
throw new SecurityException();
}
}
}
任何想法/建议都非常受欢迎。提前谢谢。
答案 0 :(得分:3)
“权利”在这里不是正确的术语 - 既定术语是Capabilities,但“权限”也被广泛使用 - 而且Java已经有Permission API用于限制代码沙箱环境。看看你是否可以使用它而不是定义自己的类。
我想说某种回调设计是必要的,Java Permission API中的implies()
方法也可能有用。
答案 1 :(得分:1)
值得一看acegi,它提供了一个很好的安全框架,可以为您节省大量的工作。即使你不使用它,它至少可以给你一些关于如何自己实现它的想法。
尽管Acegi设计用于Spring,但也可以使用它without Spring