我在表格中有10个权限。某些用户拥有全部10个权限。如何存储值列表以便可以在ASP.NET的其他页面中访问它?
网站中的每个页面都必须检查用户是否具有特定的权限。
在主页中,我可以执行查询并将权限列表存储到列表框中,并且当我导航到其他页面时,检查Permission1是否在列表框中再次检查权限是否存在列表框。
此处列表框位于主页,我无法在第2页访问它。 我必须检查第2页的页面加载权限。
如何访问页面2中的权限列表我可以添加到会话吗?
有没有更好的方法来做到这一点?
我在表格中有10个权限。某些用户拥有全部10个权限。如何存储值列表以便可以在ASP.NET的其他页面中访问它?
网站中的每个页面都必须检查用户是否具有特定的权限。
在主页中,我可以执行查询并将权限列表存储到列表框中,并且当我导航到其他页面时,检查Permission1是否在列表框中再次检查权限是否存在列表框。
此处列表框位于主页,我无法在第2页访问它。 我必须检查第2页的页面加载权限。
如何访问页面2中的权限列表我可以添加到会话吗?
有没有更好的方法来做到这一点?
您可以将数据存储在会话变量中,但我根本不喜欢该选项。 Session变量依赖于键来提取它的值,它不是强类型的,如果你负载平衡你的应用程序,你需要一个更精细的方法来保持跨服务器的会话同步。
我们使用这种类型的需求一个类库,它包含我们需要检索的特定数据的单例。下面的例子将只从数据库中检索权限列表一次,并将其缓存在单例中。它可以从您的所有页面访问。
/// <summary>
/// Singleton that retrieves and stores the common list of permissions.
/// </summary>
public static class Permissions
{
private static List<String> instance = null;
/// <summary>
/// Gets the permissions.
/// </summary>
/// <returns></returns>
static public List<String> GetPermissions()
{
if (instance == null)
instance = DatabaseHelper.GetPermissionsFromDatabase();
return instance;
}
}
这应该符合您的要求。
解决此问题的一般方法不是依赖呈现的数据到页面,而是直接或通过代理(如Web服务)利用信息的后备存储。
那么这意味着所有检查这些权限的代码都应该有一些方法来访问不依赖页面表中数据的表。如果您使用的是ASP,一种方法是创建一个代表权限表的类并从每个页面访问它。
如果您不想在每个页面上运行查询,则可以使用会话状态来存储权限。
您应该将您的权限数据存储在Page
对象的System.Web.SessionState.Session
变量中。
例如,当权限声明:
Page.Session.Add("keyName", "value");
当你需要访问这些信息,说在一个页面加载:
if(Page.Session.Item("keyName").ToString()=="someValue") //do something
你可以在Session
state或Application
state存储。
Session
是每个用户,Application
为所有用户共享(因此您必须提供线程同步以进行读写操作,例如lock
语句)。
也许检查ASP.NET会员提供商? http://msdn.microsoft.com/en-us/library/yh26yfzy.aspx –