简体   繁体   English

如何从访问掩码中读取访问权限?

[英]How to read access rights from access mask?

User can have the following access rights: 用户可以具有以下访问权限:

Read = 1
Create = 2
Edit = 4
Delete = 8
Publish = 16
Administer = 32

When access rights are saved in the database, only one number is used to represent all access rights for that user. 当访问权限保存在数据库中时,仅一个数字代表该用户的所有访问权限。

eg 例如

3 = Read + Create
25 = Read + Delete + Publish

How can I get all access rights for a given number (access mask)? 如何获得给定号码的所有访问权限(访问掩码)?

Any help would be greatly appreciated! 任何帮助将不胜感激!

[Flags]
public enum MyFlags
{
    Read = 1,
    Create = 2,
    Edit = 4,
    Delete = 8,
    Publish = 16,
    Administer = 32,
}

To declare 声明

MyFlags readCreate = MyFlags.Read | MyFlags.Create;

To test 去测试

bool hasRead = (readCreate & MyFlags.Read) == MyFlags.Read;
bool hasEdit = (readCreate & MyFlags.Edit) == MyFlags.Edit;
var mask = (AccessRights)25;

var rightsForMask = Enum.GetValues(typeof(AccessRights))
                        .Cast<AccessRights>()
                        .Where(x => mask.HasFlag(x));

foreach (var right in rightsForMask)
{
    // displays "1:Read", "8:Delete", "16:Publish"
    Console.WriteLine((int)right + ":" + right);
}

// ...

[Flags]
public enum AccessRights
{
    Read = 1, Create = 2, Edit = 4, Delete = 8, Publish = 16, Administer = 32
}

If you're not using .NET4 then the HasFlag method won't be available, in which case you'll need to change the Where clause to read Where(x => (mask & x) == x) . 如果您未使用.NET4,则HasFlag方法将不可用,在这种情况下,您需要更改Where子句以读取Where(x => (mask & x) == x)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM