未调用AuthorizationAttribute IsAuthorized

时间:2014-05-22 11:25:49

标签: c# attributes authorization

我创建了一个派生自System.ComponentModel.DataAnnotations.AuthorizationAttribute的自定义属性,并覆盖了IsAuthorized方法。

我使用new属性修饰了我的方法,但从未调用过IsAuthorized方法。任何人都可以解释原因吗?

这是我的属性声明:

[AttributeUsage(AttributeTargets.All)]
public class AuthorisationAttribute : System.ComponentModel.DataAnnotations.AuthorizationAttribute
{
    private bool IsAuthorised { get; set; }

    public AuthorisationAttribute(bool isAuthorised)
    {
        IsAuthorised = isAuthorised;
    }


    protected override AuthorizationResult IsAuthorized(IPrincipal principal, AuthorizationContext authorizationContext)
    {
        return IsAuthorised ? AuthorizationResult.Allowed : new AuthorizationResult("You are not authorised for this activity");
    }
}

这是我的用法:

 public partial class Form1 : Form
 {        
    public Form1()
    {
        InitializeComponent();
    }

    [Authorisation(true)]
    private void button1_Click(object sender, EventArgs e)
    {
        MessageBox.Show("Pass");
    }

    [Authorisation(false)]
    private void button2_Click(object sender, EventArgs e)
    {
        MessageBox.Show("Shouldn't see this");
    }
}

提前致谢。

1 个答案:

答案 0 :(得分:2)

非常少数例外,属性不是注入点。他们自己完全不做 。它们是只是元数据(有关类型/成员的信息)。要使它们活动,您需要调用框架来显式检查它们(通过反射),并调用任何方法。

在某些地方就是这种情况;例如,MVC广泛使用属性。但是winform事件处理程序和其他任意方法都不是这种情况。没有任何反应。

基本上,你已经完成了相当于将“不要进入”的粘性标签放在门上,而是在默认情况下没人能看到的地方(例如门的上边缘)。如果(两者)只做一些事情:

  • 有人寻找标签
  • 人们要么选择性地遵守标签,要么就是有一个明确的门人来检查标签与进/出的人