我想创建一个基于属性的验证程序,它比我在示例中看到的要多出几步。它基本上会阻止方法或其他功能的执行。如何防止使用属性验证程序执行C#方法?
请注意,我必须使用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()不返回从无论它的执行真正的被执行:
public class DoStuffNeedingPermissions
{
[PermissionValidator(PermissionEnumeration.MustHaveDeletePermission)]
public void DeleteSomething(){...}
}
我知道这是一个简单的,不完整的例子。但你应该清楚我所需要的东西。假设DeleteSomething()已经存在,我宁愿不修改方法中的代码。
我目前正在查看诸如验证应用程序块之类的东西,并且正在搞乱自定义属性POC。但我很想听听来自所有人的代码示例的意见。我当然也不反对完成同样事情的其他方法,例如扩展方法或可能用于完成相同事情的任何方法。请记住我正在尝试尽量减少对现有DoStuffNeedingPermissions代码的更改。感谢大家!
您是否考虑过使用基于角色的安全性?例如,用户可以处于多种角色,如CanDelete,CanUpload。 DeleteSomething()可以检查用户是否处于适当的角色。 – 2010-03-22 14:49:58
我实际上是在用你的建议来使用AzMan。但是我仍然需要以尽可能不侵入的方式来实现它。我试图让开发人员不必关心他们的DeleteSomething()类型的方法。我正在寻找更多的“automagic”。 – Boydski 2010-03-22 15:07:07