添加多个用户类型,每个用户具有不同的功能

时间:2014-05-08 21:26:04

标签: java oop design-patterns cocoa-design-patterns

我有一个应用程序,其中有45种不同的用户,每个用户都有一组功能可用。我们使用枚举来识别每组用户,并且每个功能在客户端都是硬编码的,这使得它很难改变。

e.g : 

USER_KABO,
USER HAEB,
USER_IOQW ... 

//Method getFunctionality is hardcoded for every user.
-(ArrayList)getFunctionality:(UserType)type{

   switch(type):
      case : USER_KABO:
          al  =   new ArrayList();
          al.add(new Functionality());


      case : USER HAEB;
....


}

我遍历此数组以检查用户是否具有某项功能。在登录状态下延长我在我的代码中设置了usertype。

我正在寻找一种更灵活的方法,可以轻松地向任何用户添加功能,并允许添加任何用户而无需修改太多代码。

1 个答案:

答案 0 :(得分:1)

从架构的角度来看,您的问题类似于Best Design for a User/Role Management System?。接受的答案建议使用role-based access control (RBAC)模式,这在你的情况下也是有意义的。

基本上每个用户都知道一个或多个角色(您称之为用户类型)。每个角色都知道它可以执行的一个或多个操作(您称之为功能)。

如果要添加新功能,则必须创建一个派生自 Operation 的新类,其中包含新的源代码,并链接所有适当的角色。如果要添加新用户或新角色,则不必创建新的源代码,因此不创建新类,只创建类 Subject Role中的新对象并将其链接到适当的位置。

为了维护您的应用,您可以轻松地将代码中的用户 - 和角色 - 创建提取到应用外部的配置中,这样您就不会我必须修改任何代码来更改它们。这很有效,因为您不必创建或修改类。但是,由于这是更改 Operations 的情况,因此从应用程序外部进行配置更加困难,最有可能的方法是创建新类;但当然也有可能,例如使用插件机制。