12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- using System;
- using System.Linq;
- namespace InABox.Core
- {
- [AttributeUsage(AttributeTargets.Property, AllowMultiple = true)]
- public class SecurityAttribute : Attribute
- {
- public Type SecurityDescriptor { get; set; }
- public Editable Editable { get; set; } = Editable.Hidden;
- private SecurityAttribute() { }
- public SecurityAttribute(Type securityDescriptor)
- {
- if (!securityDescriptor.GetInterfaces().Contains(typeof(ISecurityDescriptor)))
- throw new Exception(securityDescriptor.EntityName() + " is not a valid security descriptor!");
- SecurityDescriptor = securityDescriptor;
- }
- public virtual SecurityAttribute Clone()
- {
- var result = new SecurityAttribute(SecurityDescriptor)
- {
- SecurityDescriptor = SecurityDescriptor,
- Editable = Editable
- };
- return result;
- }
- }
- public class CanViewAttribute : SecurityAttribute
- {
- public CanViewAttribute(Type TEntity): base(
- typeof(AutoSecurityDescriptor<,>).MakeGenericType(TEntity, typeof(CanView<>).MakeGenericType(TEntity)))
- {
- }
- }
- public class CanEditAttribute : SecurityAttribute
- {
- public CanEditAttribute(Type TEntity) : base(
- typeof(AutoSecurityDescriptor<,>).MakeGenericType(TEntity, typeof(CanEdit<>).MakeGenericType(TEntity)))
- {
- }
- }
- public class CanDeleteAttribute : SecurityAttribute
- {
- public CanDeleteAttribute(Type TEntity) : base(
- typeof(AutoSecurityDescriptor<,>).MakeGenericType(TEntity, typeof(CanDelete<>).MakeGenericType(TEntity)))
- {
- }
- }
- }
|