考虑以下情况......
我需要获取用户权限的汇总列表。在伪代码中,我从用户所属的第一个组获得所有权限;然后对于后续组,我添加了新的权限,但对于现有的权限,我需要OR向量中的所有权限。也就是说,如果一个组有权读取,另一个组有权写入 - 用户将有权阅读和。
手术不常见;所以表现不是一个大问题。
我正在考虑使用权限向量的字典(C#等效于关联数组。理论上,我可以在正常数组中表示它,但感觉太容易出错)。说,
var permVector = new Dictionary<string, bool> {
{"read", true}, {"delete", false} ...
}
然后组的权限是另一个词典
var groupPermissions = new Dictionary<int, Dictionary<string, bool>> {
{ 1, permVector }...
}
(这来自数据库;为了清楚起见,我在这里展示了这种方式)
最后,用户权限将是所有组权限的智能合并。这就是我觉得我要走下兔子洞的地方。
是否有更适合此任务的类型?
答案 0 :(得分:1)
LINQ查询将所有权限合并在一起:
var userPermissions =
groupPermissions
.SelectMany(pv => pv.Value) //Select all the Dictionaries
.GroupBy(pv => pv.Key) //Get each permission into its own group
.ToDictionary(g => g.Key, //Create the result
g => g.Any(permission => permission.Value));