我有一个应用程序,其中有 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; .... }
我遍历这个数组来检查用户是否具有功能。根据登录状态,我在代码中设置用户类型。
我正在寻找一种更灵活的方法,可以轻松地向任何用户添加功能,并允许在不修改太多代码的情况下添加任何用户。
最佳答案
从架构的角度来看,您的问题类似于Best Design for a User/Role Management System? 。接受的答案建议使用 role-based access control (RBAC)模式,这对您的情况也有意义。
基本上,每个用户都知道一个或多个角色(您所说的用户类型)。每个角色都知道它可以执行的一个或多个操作(您所说的功能)。
如果您想添加新功能,则必须创建一个从Operation派生的新类,其中包含新的源代码,并将所有适当的角色链接到它。如果您想添加新用户或新角色,则不必创建新的源代码,因此您无需创建新类,而只需从类 Subject 或 Role 中创建一个新对象,并将其适当链接。
为了维护您的应用,您可以轻松地将代码中的用户和角色创建提取到应用外部的配置中,这样您就不必修改任何代码来更改它们。这很有效,因为您不必创建或修改类。但由于需要更改操作,因此从应用程序外部配置这些操作会更加困难,而且很可能最好的方法就是创建新类;但当然这也是可能的,例如具有插件机制。
关于java - 添加多种用户类型,每个用户都有不同的功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23552849/