2014-05-01 59 views
0

我有一个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的数据库中为每个其他对象创建一个枚举,就像使用Object1DefaultsObject2Defaults一样,除了有更好的名称和更多的名称。

回答

0

首先,我建议不要使用枚举作为标志。它限制了你可以拥有的总数,现在可能不是问题,但如果你稍后在比赛中跑出一些点,那将是一个大问题。因此,让你的权限容器集合。

一旦你这样做,使用LINQ,它是很容易的结果拼合到一个数组(或列表,或任何你想要的):

var result = roles.SelectMany(x => Object1Defaults).Distinct().ToArray();