自定义属性和执行方法

时间:2015-03-17 13:21:30

标签: c#

我创建了自定义属性:

[System.AttributeUsage(System.AttributeTargets.All, AllowMultiple = true)]
public class CustomPermission : Attribute
{
    public CustomPermission (string perName)
    {
        this._name= perName;
    }
    protected String _name;
    public String Name
    {
        get
        {
            return this._name;
        }
    }       
}

我的方法有以下属性:

[CustomPermission("Allowed")]
public void GetData()
{
   //only comes here if permisson is allowed
   //logic for db 
}

我希望每当调用GetData时,它都会自动检查方法的CustomPermission属性,并相应地授予/拒绝访问。

我该怎么做?

由于

2 个答案:

答案 0 :(得分:0)

根据我的理解,你想要达到的目标是无法用属性做的。您的方法可能的最佳安全性是在客户端调用方法之前使用反射来查找属性;但是,客户端通过这种方式决定它是否真正尊重受限访问权限,这不是访问控制。

答案 1 :(得分:0)

您可能完全以错误的方式解决这个问题,但要访问方法中的元数据,您必须执行以下操作:

[CustomPermission("Allowed")]
public void GetData()
{
   var mi = MethodInfo.GetCurrentMethod();
   var attr = mi.GetCustomAttribute<CustomPermission>();
   // now attr contains your CustomPermission
   if (attr.Name == "Allowed") 
   {
       //only comes here if permisson is allowed
       //logic for db 
   }
}

这显然有点难看,可以通过将属性存储在某个地方进行优化,这样您就不必每次都找到它。但无论如何,正如其他人所评论的那样,我认为这不会最终达到你想做的目的。