我有一个Role
对象,它有几个标志枚举属性,每个属性对应一个相关对象。用户可以属于多个角色。我希望获得角色集合并将其展平为单个表示形式,并使用它来限制UI功能。如何展开收藏?
这是我的LINQPad测试中的一些示例代码:
ICollection<Role> roles = new List<Role>();
roles.Add(new Role {
Name = "Administrator",
Object1Defaults = DefaultPermissions.Add | DefaultPermissions.Edit | DefaultPermissions.Remove,
Object2Defaults = DefaultPermissions.Add | DefaultPermissions.Edit | DefaultPermissions.Remove
});
roles.Add(new Role {
Name = "Manager",
Object1Defaults = DefaultPermissions.Add | DefaultPermissions.Edit,
Object2Defaults = DefaultPermissions.Add | DefaultPermissions.Edit
});
public class Role {
public string Name { get; set; }
public DefaultPermissions Object1Defaults { get; set; }
public DefaultPermissions Object2Defaults { get; set; }
}
[Flags]
public enum DefaultPermissions {
Add = 1 << 0,
Edit = 1 << 1,
Remove = 1 << 2
}
当然,我也欢迎提出更好的方法来实现权限。我的计划是在Role
数据库中为每个其他对象创建一个枚举,就像使用Object1Defaults
和Object2Defaults
一样,除了更好的名称和更多它们。
答案 0 :(得分:0)
首先,我建议不要使用枚举作为标志。它限制了你可以拥有的总数,这可能不是现在的问题,但如果你以后用完了比特,这将是一个大问题。因此,请将您的权限容器设为集合。
一旦你这样做,使用linq,很容易将结果展平成数组(或List,或任何你想要的):
var result = roles.SelectMany(x => Object1Defaults).Distinct().ToArray();