在哪里放置访问权限

时间:2014-04-07 13:30:19

标签: .net xml asp.net-mvc-4

我正在开发MVC4中的应用程序。因为我有各种类型的用户,每个用户都拥有不同的访问权限。根据访问权限,用户携​​带应用程序将相应地生成视图。此访问权限将在创建时提供给用户。

我已将此访问权限存储在数据库中。我的问题是,每次用户做某事我都必须检查它是否有访问权限,因为每次我需要从数据库中获取它,但我不想这样做。我希望这样做是为了保存在一个xml文件中,但是当多个用户使用它时,它会重写,这会造成故障。

我想知道保留这些细节的好地方是什么,以便在整个项目期间始终可以使用它。

1 个答案:

答案 0 :(得分:1)

您可以将此信息存储在Web应用程序的所有会话均可访问的全局应用程序缓存中。如果要存储每个会话的数据,那么您应该考虑将数据存储在会话中。

Here是指向.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))
    {
      ....
    }
}