簡體   English   中英

在哪里放置訪問權限

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM