我有一个应用程序需要对其权限系统进行大修。
此应用程序有两种需要保护的“实体”:
- 用户
- 公司
用户很简单,他们只是拥有可以访问应用程序区域的角色,不会更改任何数据。
公司可以是 3 种类型之一 - 管理(目前只是拥有产品的“主”公司)、合作伙伴(产品的经销商)和标准(仅使用产品的人)。
该产品还具有公司“集团”的概念,因为经销商可以以不同的名称销售产品,但需要能够一次看到所有数据。因此,每个公司始终属于一个集团,而每个集团又归一家公司所有。
在查询数据时,我有几个要求:
- 如果属于经销商公司A的用户查询数据,经销商拥有的所有组中的所有公司都需要出现
- 如果属于标准公司 B 的用户查询数据,他们应该只看到他们的信息
- 如果属于行政公司 C 的用户查询数据,他们应该会看到所有内容
- 最后,显示的实际数据需要按公司类型过滤 - 管理公司看到的数据比经销商多,经销商比标准公司看到的信息多
现在,当前系统实际上完成了大部分工作,但有很多:
List<int> groups;
if(CompanyType == CompanyType.Reseller){
groups = [some list of groups]
}else{
....
}
这是相当丑陋且容易出错的。
我们正在使用 SubSonic、WCF(整个系统采用 REST 接口设计)、PostSharp 和 C#,因此您知道可用的工具。
任何人都可以建议一种在框架级别使用这种详细程度(本质上是行和列)实现权限的好方法,以确保适当且自动地设置限制吗?