2

アクセス制御リストのアクセス許可チェックのために、以下のコードを書くことにしました。

私のデータベースは、、、のようなレコードを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コレクションの準備でそれを作成し、後で許可を確認するために同じものを見つけるにはどうすればよいですか。

4

2 に答える 2

1

.NET 4.0 で作業している場合は、ACL 列挙型をFlags属性で装飾し、モデルを少し変更できます。

// 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;
    }
}
于 2013-05-19T15:10:05.123 に答える