using System; namespace PostSharp.Samples.Authorization.Framework { /// <summary> /// A trivial implementation of the <see cref="IPermission" /> interface where permissions are uniquely named. /// </summary> /// <remarks> /// In a real implementations, permissions are database entities. /// </remarks> public class Permission : IPermission { public static readonly Permission Read = new Permission(StandardPermission.Read.ToString()); public static readonly Permission Write = new Permission(StandardPermission.Write.ToString()); public static readonly Permission Assign = new Permission(StandardPermission.Assign.ToString()); public static readonly Permission ManageRoles = new Permission(StandardPermission.ManageRoles.ToString()); public Permission(string name) { Name = name; } public string Name { get; } bool IEquatable<IPermission>.Equals(IPermission other) { if (ReferenceEquals(null, other)) { return false; } if (ReferenceEquals(this, other)) { return true; } return string.Equals(Name, other.Name); } public override bool Equals(object obj) { if (ReferenceEquals(null, obj)) { return false; } if (ReferenceEquals(this, obj)) { return true; } if (obj.GetType() != GetType()) { return false; } return Equals((Permission) obj); } public override int GetHashCode() { return Name != null ? Name.GetHashCode() : 0; } public override string ToString() { return Name; } } }