using System.Security.Permissions;
namespace AccessThingie {
[AttributeUsageAttribute(AttributeTargets.Method)]
public class IsAuthorized : CodeAccessSecurityAttribute {
private static readonly PrincipalPermission Allowed = new PrincipalPermission(PermissionState.None);
private static readonly PrincipalPermission NotAllowed = new PrincipalPermission(PermissionState.Unrestricted);
public static class Rights
public const string None = "None";
public const string CreateUserGroup = "CreateUserGroup";
public string Right { get; set; }
public IsAuthorized(SecurityAction action)
public override IPermission CreatePermission()
return IsAuthorised(Right) ? Allowed : NotAllowed;
private static bool IsAuthorised(string right)
if (right == Rights.None)
[IsAuthorized(SecurityAction.Demand, Right = IsAuthorized.Rights.CreateUserGroup)]
public static string Ping()
return "The service is online";
private static void Main(string[] args)