簡體   English   中英

從web.config授權Roles MVC Web

[英]Authorize Roles MVC web from web.config

將“ System.Configuration.ConfigurationManager.AppSettings [“ ADGroupReader”]。ToString()“添加到授權角色部分標題時,出現以下編譯錯誤。

在web.config中,我具有:添加key =“ ADGroupReader” value =“閱讀器DEV”

編譯錯誤:屬性參數必須是屬性參數類型的常量表達式,typeof表達式或數組創建表達式

[AuthorizedRedirect]
[Authorize(Roles = System.Configuration.ConfigurationManager.AppSettings["ADGroupReader"].ToString())]    
public class HomeController : Controller
{
    .....
}

我不想對角色進行硬編碼(Roles =“ Readers DEV”); 我想從web.config中讀取它。 我怎樣才能做到這一點?

屬性教程介紹了屬性參數限制:

屬性參數限制為以下類型的常量值:

  • 簡單類型(bool,byte,char,short,int,long,float和double)
  • 系統類型
  • 枚舉
  • 對象(類型為對象的屬性參數的參數必須為上述類型之一的常數。)
  • 以上任何類型的一維數組

根據上面的描述,由於存在ToString方法,因此該分配無效:

[Authorize(Roles = System.Configuration.ConfigurationManager.AppSettings["ADGroupReader"].ToString())]

解決方法是,您可以使用預定義的Roles參數創建自定義AuthorizeAttribute ,其中包含通過AppSettingsRoles默認分配:

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true, Inherited = true)]
public class CustomAuthorizeAttribute : AuthorizeAttribute
{
    public CustomAuthorizeAttribute() 
    {
        this.Roles = ConfigurationManager.AppSettings["ADGroupReader"].ToString();
    }

    // other stuff
}

控制器類中的用法:

[AuthorizedRedirect]
[CustomAuthorize]
public class HomeController : Controller
{
    .....
}

我這樣解決了

創建一個派生類ReaderAuthorizeAttribute

public class ReaderAuthorizeAttribute : AuthorizeAttribute
{
    public ReaderAuthorizeAttribute()
    {            
        this.Roles = System.Configuration.ConfigurationManager.AppSettings["ADGroupReader"];
    }

    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        return base.AuthorizeCore(httpContext);
    }
}

然后添加了[LoteReaderAuthorizeAttribute]

[AuthorizedRedirect]
[ReaderAuthorizeAttribute]    
public class HomeController : Controller
{
   ....
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM