我正在开发MVC4中的应用程序。因为我有各种类型的用户,每个用户都拥有不同的访问权限。根据访问权限,用户携带应用程序将相应地生成视图。此访问权限将在创建时提供给用户。
我已将此访问权限存储在数据库中。我的问题是,每次用户做某事我都必须检查它是否有访问权限,因为每次我需要从数据库中获取它,但我不想这样做。我希望这样做是为了保存在一个xml文件中,但是当多个用户使用它时,它会重写,这会造成故障。
我想知道保留这些细节的好地方是什么,以便在整个项目期间始终可以使用它。
答案 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))
{
....
}
}