标准权利模型

时间:2009-07-01 08:36:33

标签: java oop

我目前正在构建一个我需要添加权利的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();
    }
  }
}

任何想法/建议都非常受欢迎。提前谢谢。

2 个答案:

答案 0 :(得分:3)

“权利”在这里不是正确的术语 - 既定术语是Capabilities,但“权限”也被广泛使用 - 而且Java已经有Permission API用于限制代码沙箱环境。看看你是否可以使用它而不是定义自己的类。

我想说某种回调设计是必要的,Java Permission API中的implies()方法也可能有用。

答案 1 :(得分:1)

值得一看acegi,它提供了一个很好的安全框架,可以为您节省大量的工作。即使你不使用它,它至少可以给你一些关于如何自己实现它的想法。

尽管Acegi设计用于Spring,但也可以使用它without Spring