次のアクション フィルター クラスを作成しました:-
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
public class CheckUserPermissionsAttribute : ActionFilterAttribute
{
Repository repository = new Repository();
public string Model { get; set; }
public string Action { get; set; }
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
string ADusername = filterContext.HttpContext.User.Identity.Name.Substring(filterContext.HttpContext.User.Identity.Name.IndexOf("\\") + 1);
if (!repository.can(ADusername,Model,Action))
{
filterContext.Result = new HttpUnauthorizedResult("You cannot access this page");
}
base.OnActionExecuting(filterContext);
}
}
次のモデル リポジトリ クラスを呼び出します:-
public bool can(string user, string Model, string Action) {
if (Model == "Admin")
{
bool isadminByuser = tms.SecurityRoles.Where(a => a.Name == "Administrator").SingleOrDefault().SecurityRoleUsers.Any(a => a.UserName.ToLower() == user.ToLower());
var adminByGroup = tms.SecurityRoles.Where(a => a.Name == "Administrator").SingleOrDefault().Groups.Select(a2 => a2.TMSUserGroups.Where(a3 => a3.UserName.ToLower() == user.ToLower()));
bool isadminByGroup = adminByGroup.Count() >= 1;
if (isadminByGroup || isadminByuser)
{
return true;
}
}
return false;
}
上記は正常に機能しますが、データベースの値を変更すると、リポジトリの値が変更されます。isadminByuser と adminByGroup は、同じ値 (キャッシュされた値) を持ちます。しかし、プロジェクトを停止し、ビジュアル スタジオからプロジェクトを再度ビルドして実行すると、正しい値が得られます。プロジェクトを再実行しない限り、リポジトリに同じ値を強制するキャッシュの問題がある場合、誰でもアドバイスできますか?
ありがとう