2014-01-22 82 views
0

我在ASP.NET MVC上遇到了一個問題。 我已經創建了一個自定義的AuthorizeAttribute,以便從數據庫中獲取每個動作和每個控制器的角色。授權屬性和緩存問題

下面是代碼:

public class CustomAuthAttribute : AuthorizeAttribute 
{ 
    private string[] _roles; 
    private Db_Entities db = new Db_Entities(); 
    private String controller; 
    private String action; 

    public CustomAuthAttribute(String controller, String action) 
    { 
     this.controller = controller; 
     this.action = action;   
    } 


    protected override bool AuthorizeCore(HttpContextBase httpContext) 
    { 
     if (httpContext == null) 
     { 
      throw new ArgumentNullException("httpContext"); 
     } 

     Actions myAction = db.Actions.Where(a => a.Libelle.Equals(this.action)).Single(a => a.Controller.Equals(this.controller)); 
     List<String> myGroupeList = new List<String>(); 
     foreach (Groupes g in myAction.Groupes) 
     { 
      myGroupeList.Add(g.Groupe); 
     } 
     this._roles = myGroupeList.ToArray<string>(); 

     IPrincipal user = httpContext.User; 
     if (!user.Identity.IsAuthenticated) 
     { 
      return false; 
     } 

     bool isAuthorized = false; 

     RoleProviderAD rp = new RoleProviderAD(); 
     string[] DbRoles = rp.GetRolesForUser(httpContext.User.Identity.Name); 
     foreach (string str in DbRoles) 
     { 
      if (this._roles.Contains(str)) 
      { 
       isAuthorized = true; 
      } 
     } 
     return isAuthorized; 
    } 

} 

當從「家」控制器「指數」動作被調用,AuthorizeCore被稱爲太以及有關用戶權限的數據都是從數據庫中捕獲。 但是,如果我從數據庫中更改數據,當我再次調用此頁時,儘管代碼似乎必須再次運行,但舊數據仍會被捕獲。

我試圖使用ActionFilterAttribute,但由於順序,它不工作。我也嘗試在我們的IIS服務器上添加一些規則。一切都失敗了。 如果有人能幫助我,那會很棒!

回答

0

如果您正在使用的任何阿賈克斯calls.Try包括Ajax調用

$.ajaxSetup({ cache: false }); 
+0

沒有Ajax調用這個動作 –

+0

你怎麼打電話給你的方法之前,這個代碼? – Sajeev

+0

在這種情況下,它是一個簡單的鏈接:Html.ActionLink(「Accueil」,「Index」,「Home」) –