2015-12-24 139 views
2

由於我是新的ASP.NET身份,我正在經歷的MVA視頻時傑里米福斯特問了一個問題demoing時如何能在以下幾個方面進行動態:ASP.NET身份動態角色授權

[Authorize("Administrators, Users")] 
public ActionResult SomeAction() 
{ 
    //Access to only admins and users 
} 

作爲回答,Adam Tuliper表示可以通過索賠來完成,但我沒有在互聯網上找到具體的東西,或者我可能不理解。但是,如果有人能告訴我如何做到這一點,我將不勝感激。

這很重要,因爲稍後我可能會允許SomeAction被另一個角色訪問,如果我需要每次重新編譯和部署我的應用程序,那就不好了。另外,我可能會控制用戶更改其他類型用戶的訪問權限。

在過去,我通過覆蓋Authorize屬性來完成此操作,其中我從Cookie中提取用戶的RoleId並從數據庫中檢查用戶是否有權訪問請求的操作。但不知道如何使用索賠來完成。

回答

0

這樣的事情是怎樣的: 你可以在數據庫中使用它,或者簡單地在web.config中維護一個授權角色列表。

[AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = true)] 
    public class MyCustomAuthorizationAttribute : AuthorizeAttribute 
    { 
     protected override bool AuthorizeCore(HttpContextBase httpContext) 
     { 
      // Do some logic here to pull authorised roles from backing store (AppSettings, MSSQL, MySQL, MongoDB etc) 
      ... 
      // Check that the user belongs to one or more of these roles 
      bool isUserAuthorized = ....; 

      if(isUserAuthorized) 
       return true; 

      return base.AuthorizeCore(httpContext); 
     } 
    } 
+1

那就是我之前說過的話。但似乎沒有像Identity這樣的基於索賠的系統的方式。 – lbrahim