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服務器上添加一些規則。一切都失敗了。 如果有人能幫助我,那會很棒!
沒有Ajax調用這個動作 –
你怎麼打電話給你的方法之前,這個代碼? – Sajeev
在這種情況下,它是一個簡單的鏈接:Html.ActionLink(「Accueil」,「Index」,「Home」) –