在设计课程时,您如何处理子类型?

时间:2016-01-23 19:49:34

标签: oop architecture

我正在学习面向对象的设计,因为我通过我的第一个真实的,虽然是个人的项目。

我正处于构建用户对象的阶段。我有4个用户子类型:

  1. root-admin - 网站管理员,网站所有者
  2. group-admin - 拥有会员资格和页面的小组的负责人(例如乐队经理)
  3. group-member - 可以在页面上以组成员的身份查看,发布和评论并查看私人内容(例如乐队成员)的用户
  4. 无关联的用户 - 可以公开查看和评论的整个网站的成员(例如粉丝)
  5. 所有群组管理员都是群组成员,所有群组成员也将是无关联用户。所以基本上它是一个简单的用户权限层次结构。

    话虽如此,我如何针对这些级别设置我班级的架构?有嵌套技术吗?我只是在努力在这里挖出脚手架。我已经写好了我的用例和叙述。

1 个答案:

答案 0 :(得分:3)

因此,您正在实施基于角色的访问控制。每个用户都有四个角色之一。因此,用户是一个对象,用户的角色是用户对象中的一个属性。

enum roles {
   root_admin,
   group_admin,
   group_member,
   unassociated_user
}

class user {
   string id;
   roles role;
}

接下来,您需要强制执行允许某些角色的用户执行某些活动的业务规则。

从一个简单的解决方案开始(这总是一个好的政策):

enum activities {
   view,
   post,
   add_comment
}

实现一个函数或类,其作用是说某个角色是否允许某个活动。

class role_based_access_control {
private:
      permissions perm;
public:
   bool is_permitted(activities a, roles r) {
      return perm[r].contain(a);
   }
}

然后,在代码中实现不同活动的位置,包括对此函数的调用:

void add_comment_to_page(user u, comment c, page p) {
   if (!role_base_access_control.is_permitted(add_comment,u.role))
      throw "access_forbidden";
   ... 
}

重要的是将基于角色的访问控制规则保持集中,以便它们可见,易于监控和审核。