我想创建一个基于属性的验证器,它比我在示例中看到的要好几步。它基本上会阻止执行方法或其他功能。
请注意,我必须使用AzMan,因为在此方案中我无法使用Active Directory。
以下是我正在寻找的一些伪代码:
// Attribute validator class AttributeUsage is arbitrary at this point and may include other items
[AttributeUsage( AttributeTargets.Method | AttributeTargets.Property, AllowMultiple = true, Inherited = true )]
public class PermissionsValidatorAttribute : Attribute
{
public PermissionsValidatorAttribute(PermissionEnumeration permission){...}
public bool UserCanCreateAndEdit(){...}
public bool UserCanDelete(){...}
public bool UserCanUpload(){...}
}
这是一个将要装饰的类/成员的示例。如果PermissionValidator.UserCanDelete()在执行的任何地方都不返回true,则根本不会执行该方法:
public class DoStuffNeedingPermissions
{
[PermissionValidator(PermissionEnumeration.MustHaveDeletePermission)]
public void DeleteSomething(){...}
}
我知道这是一个简单,不完整的例子。但你应该得到我所需要的要点。假设DeleteSomething()已经存在,我宁愿不修改方法中的代码。
我目前正在查看验证应用程序块之类的内容,并且正在搞乱自定义属性POC。但我很乐意听到来自所有人的代码示例的意见。我当然也不反对其他方法来完成同样的事情,例如扩展方法或任何可能有助于完成同样事情的方法。请记住,我正在尝试尽量减少对现有DoStuffNeedingPermissions代码的更改。谢谢大家!
答案 0 :(得分:4)
您是否有理由不考虑PrincipalPermissionAttribute?
[PrincipalPermissionAttribute(SecurityAction.Demand, Name="Bob",
Role="Supervisor")]
答案 1 :(得分:1)
我认为关键是不要改变DoStuffNeedingPermissions.
你必须修改调用该类'方法的所有东西,让他们检查权限。这显然是侵入性的。如果我有使用属性,我会考虑使用AOP框架的拦截功能来包装执行调用,并在那里检查它。这是有效的,因为安全性是跨领域关注的典型案例。