SecurityAttribute.cs 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. using System;
  2. using System.Linq;
  3. namespace InABox.Core
  4. {
  5. [AttributeUsage(AttributeTargets.Property, AllowMultiple = true)]
  6. public class SecurityAttribute : Attribute
  7. {
  8. public Type SecurityDescriptor { get; set; }
  9. public Editable Editable { get; set; } = Editable.Hidden;
  10. private SecurityAttribute() { }
  11. public SecurityAttribute(Type securityDescriptor)
  12. {
  13. if (!securityDescriptor.GetInterfaces().Contains(typeof(ISecurityDescriptor)))
  14. throw new Exception(securityDescriptor.EntityName() + " is not a valid security descriptor!");
  15. SecurityDescriptor = securityDescriptor;
  16. }
  17. public virtual SecurityAttribute Clone()
  18. {
  19. var result = new SecurityAttribute(SecurityDescriptor)
  20. {
  21. SecurityDescriptor = SecurityDescriptor,
  22. Editable = Editable
  23. };
  24. return result;
  25. }
  26. }
  27. public class CanViewAttribute : SecurityAttribute
  28. {
  29. public CanViewAttribute(Type TEntity): base(
  30. typeof(AutoSecurityDescriptor<,>).MakeGenericType(TEntity, typeof(CanView<>).MakeGenericType(TEntity)))
  31. {
  32. }
  33. }
  34. public class CanEditAttribute : SecurityAttribute
  35. {
  36. public CanEditAttribute(Type TEntity) : base(
  37. typeof(AutoSecurityDescriptor<,>).MakeGenericType(TEntity, typeof(CanEdit<>).MakeGenericType(TEntity)))
  38. {
  39. }
  40. }
  41. public class CanDeleteAttribute : SecurityAttribute
  42. {
  43. public CanDeleteAttribute(Type TEntity) : base(
  44. typeof(AutoSecurityDescriptor<,>).MakeGenericType(TEntity, typeof(CanDelete<>).MakeGenericType(TEntity)))
  45. {
  46. }
  47. }
  48. }