ビットフラグ列挙型を使用して、タスクのリストを作成し、それらを使用してユーザー権限を割り当てることができます。残念ながら、ulongを使用する場合でも、これにより最大64のオプションが制限されます。サンプルコードは次のとおりです。
[Flags]
public enum TaskPermissions : ulong
{
None = 0x0000,
CanDoTask1 = 0x0001,
CanDoTask2 = 0x0002,
CanDoTask3 = 0x0004,
CanDoTask4 = 0x0008,
CanDoTask5 = 0x0010,
// ... powers of 2
CanDoEverything = 0xFFFF
}
public class Member
{
public string Username {get;set;}
public TaskPermissions Permissions { get; set; }
// other things that are necessary
public bool HasPermission(TaskPermissions permissions)
{
return (Permissions & permissions) == permissions;
}
}
権限を設定するには:
var member=new Member():
member.Permissions= TaskPermissions.CanDoTask1 | TaskPermissions.CanDoTask2;
許可を確認するには:
member.HasPermission(TaskPermissions.CanDoTask1);
MvcのサンプルAuthorizationRequiredAttribute(メンバーがセッションにいると仮定):
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = true)]
public class AuthorizationRequiredAttribute : ActionFilterAttribute
{
public TaskPermissions RequiredPermissions { get; set; }
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (filterContext.Controller.Session["Member"].HasPermission(RequiredPermissions))
{
base.OnActionExecuting(filterContext);
return;
}
throw new AuthenticationException("Access denied");
}
}
使用法:
[AuthorizationRequired(RequiredPermissions = TaskPermissions.CanDoTask1)]
public class TestController : Controller
{
//methods
}