我决定为访问控制列表权限检查编写以下代码。
我的数据库将返回EmployeeDetFeature
,Create
,Edit
我想解析Create
并将其添加到功能ACL枚举列表中。
我还需要稍后再找。
public enum ACL
{
Create,
Delete,
Edit,
Update,
Execute
}
public class Feature
{
public int Id { get; set; }
public string Name { get; set; }
public List<ACL> ACLItems { get; set; }
}
public static class PermissionHelper
{
public static bool CheckPermission(Role role, string featureName, ACL acl)
{
Feature feature = role.Features.Find(f =>f.Name == featureName);
if (feature != null)
{
//Find the acl from enum and if exists return true
return true;
}
return false;
}
}
如何使用Enum集合准备工作,稍后查找相同的内容以获得检查权限。
答案 0 :(得分:3)
从枚举中找到acl,如果存在则返回true
这样的东西?
bool b= Enum.GetValues(typeof(ACL)).Cast<ACL>().Any(e => e == acl);
答案 1 :(得分:1)
如果您正在使用.NET 4.0,则可以使用Flags属性修饰ACL枚举并稍微更改您的模型:
// Added Flags attribute.
[Flags]
public enum ACL
{
None = 0,
Create = 1,
Delete = 2,
Edit = 4,
Update = 8,
Execute = 16
}
public class Feature
{
public int Id { get; set; }
public string Name { get; set; }
// ACLItems is not List anymore.
public ACL ACLItems { get; set; }
}
现在您可以使用Enum.TryParse,如下例所示:
static void Main(string[] args)
{
ACL aclItems = ACL.Create | ACL.Edit | ACL.Execute;
var aclItemsString = aclItems.ToString();
// aclItemsString value is "Create, Edit, Execute"
ACL aclItemsOut;
if (Enum.TryParse(aclItemsString, out aclItemsOut))
{
var areEqual = aclItems == aclItemsOut;
}
}