![](/img/trans.png)
[英]Is there a way to grant privileged access to a .NET assembly to only one other assembly?
[英]Where to place the access privileged
我正在開發MVC4中的應用程序。 因為我有各種類型的用戶,每個用戶都具有不同的訪問特權。 取決於訪問權限,用戶攜帶應用程序將相應地生成視圖。 該訪問權限將在創建時授予用戶。
我已將此訪問權限特權存儲在數據庫中。 我的問題是,每次用戶執行某項操作時,我都必須檢查它是否具有訪問權限,因為每次我都需要從數據庫中獲取它但我不想這樣做時。 我希望這樣做以保留在xml文件中,但是當多個用戶使用它時,它將覆蓋發生故障的重寫。
我想知道保留這些詳細信息的最佳位置是什么,以便在整個項目過程中始終可以使用它。
您可以將此信息存儲在全局應用程序緩存中,您的Web應用程序的所有會話都可以訪問該信息。 如果要按會話存儲數據,則可以考慮將數據存儲在會話中。
這是.net中緩存技術和最佳實踐的鏈接。
在這種情況下,會話緩存可能更有用,因為數據是針對已登錄用戶的。
在會話中填充用戶數據非常簡單。 這是我如何設想存儲有關用戶的數據的示例。
public class MySession
{
private const string _SessionName = "__MY_SESSION__";
private MySession(){}
public MyUser CurrentUser { get; set; }
public static MySession Current
{
get
{
MySession session =(MySession)HttpContext.Current.Session[_SessionName];
if (session == null)
{
session = new MySession();
HttpContext.Current.Session[_SessionName] = session;
}
return session;
}
}
public void Clear()
{
HttpContext.Current.Session.Clear();
HttpContext.Current.Session.Abandon();
}
}
然后,您可以在服務器端方法可以訪問的某些靜態幫助器類中使用此類。
public static MyAppClass
{
public static MySession Session { get { return MySession.Current; } }
}
然后在您的控制器中,您只需撥打類似於以下內容的電話:
public ActionResult Login()
{
MyUser user=GetUserFromDatabase();
MyAppClass.Session.CurrentUser=user;
}
public ActionResult SomMethod()
{
MyUser loggedInUser=MyAppClass.Session.CurrentUser;
if(loggedInUser.CanAccess(something))
{
....
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.