我有一个应用程序,其中有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。
我正在寻找一种更灵活的方法,可以轻松地向任何用户添加功能,并允许添加任何用户而无需修改太多代码。
答案 0 :(得分:1)
从架构的角度来看,您的问题类似于Best Design for a User/Role Management System?。接受的答案建议使用role-based access control (RBAC)模式,这在你的情况下也是有意义的。
基本上每个用户都知道一个或多个角色(您称之为用户类型)。每个角色都知道它可以执行的一个或多个操作(您称之为功能)。
如果要添加新功能,则必须创建一个派生自 Operation 的新类,其中包含新的源代码,并链接所有适当的角色。如果要添加新用户或新角色,则不必创建新的源代码,因此不创建新类,只创建类 Subject 或 Role中的新对象并将其链接到适当的位置。
为了维护您的应用,您可以轻松地将代码中的用户 - 和角色 - 创建提取到应用外部的配置中,这样您就不会我必须修改任何代码来更改它们。这很有效,因为您不必创建或修改类。但是,由于这是更改 Operations 的情况,因此从应用程序外部进行配置更加困难,最有可能的方法是创建新类;但当然也有可能,例如使用插件机制。