在设计类的时候,你是怎么处理子类型的?
When designing classes, how do you deal with sub-types?
我正在学习面向对象的设计,因为我正在经历我的第一个真实的,尽管是个人的项目。
我正处于构建用户对象的阶段。我有 4 个用户子类型:
- root-admin - 网站管理员,网站所有者
- group-admin - 具有成员资格和页面的组的领导者(例如乐队经理)
- group-member - 可以在页面上查看、post 和作为群组成员发表评论并查看私人内容(例如乐队成员)的用户
- 非关联用户 - 可以公开查看和评论的整个站点的成员(例如粉丝)
所有群组管理员都将成为群组成员,所有群组成员也将成为非关联用户。所以基本上它是一个简单的用户权限层次结构。
话虽如此,我该如何根据这些级别设置 class 的架构?有嵌套技术吗?我只是在努力解决这里的脚手架问题。我已经写好了我的用例和叙述。
所以您正在实施 role-based 访问控制。每个用户都具有四种角色之一。所以用户是一个对象,用户的角色是用户对象中的属性之一。
enum roles {
root_admin,
group_admin,
group_member,
unassociated_user
}
class user {
string id;
roles role;
}
接下来,您需要执行允许特定角色的用户执行特定活动的业务规则。
从一个简单的解决方案开始(这总是一个好策略):
enum activities {
view,
post,
add_comment
}
并实现一个函数或 class,其工作是说明给定角色是否允许 activity。
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";
...
}
重要的是保持基于角色的访问控制规则集中,以便它们可见、易于监控和审计。
我正在学习面向对象的设计,因为我正在经历我的第一个真实的,尽管是个人的项目。
我正处于构建用户对象的阶段。我有 4 个用户子类型:
- root-admin - 网站管理员,网站所有者
- group-admin - 具有成员资格和页面的组的领导者(例如乐队经理)
- group-member - 可以在页面上查看、post 和作为群组成员发表评论并查看私人内容(例如乐队成员)的用户
- 非关联用户 - 可以公开查看和评论的整个站点的成员(例如粉丝)
所有群组管理员都将成为群组成员,所有群组成员也将成为非关联用户。所以基本上它是一个简单的用户权限层次结构。
话虽如此,我该如何根据这些级别设置 class 的架构?有嵌套技术吗?我只是在努力解决这里的脚手架问题。我已经写好了我的用例和叙述。
所以您正在实施 role-based 访问控制。每个用户都具有四种角色之一。所以用户是一个对象,用户的角色是用户对象中的属性之一。
enum roles {
root_admin,
group_admin,
group_member,
unassociated_user
}
class user {
string id;
roles role;
}
接下来,您需要执行允许特定角色的用户执行特定活动的业务规则。
从一个简单的解决方案开始(这总是一个好策略):
enum activities {
view,
post,
add_comment
}
并实现一个函数或 class,其工作是说明给定角色是否允许 activity。
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";
...
}
重要的是保持基于角色的访问控制规则集中,以便它们可见、易于监控和审计。