我的桌子上有10个人的许可。有些用户拥有全部10个权限。
网站中的每个页面都必须检查用户是否具有特定权限。
在主页中,我可以进行查询并将权限列表存储到列表框中,并检查Permission1是否在列表框中,当我导航到其他页面时再次我必须检查权限是否存在于列表框。
此处列表框位于主页中,我将无法在第2页访问它。 我必须在第2页中检查页面加载的权限。
如何访问第2页中的权限列表,我可以添加到会话吗?
有没有更好的方法呢?
答案 0 :(得分:0)
解决此问题的一般方法是不依赖于呈现的数据到页面,而是直接或通过代理(例如Web服务)利用信息的后备存储。
那么这意味着检查这些权限的所有代码应该有一些方法来访问该表,而不依赖于页面上的表中的数据。如果您使用的是asp,则可以创建一个表示权限表的类,并从每个页面访问它。
答案 1 :(得分:0)
如果您不想在每个页面上运行查询,可以使用会话状态来存储权限。
答案 2 :(得分:0)
您应该将权限数据存储在Page
对象的System.Web.SessionState.Session
变量中。
例如,声明权限时:
Page.Session.Add("keyName", "value");
当您需要访问信息时,请在页面加载中说:
if(Page.Session.Item("keyName").ToString()=="someValue") //do something
答案 3 :(得分:0)
您可以存储在Session
state或Application
state中。
Session
,所有用户都共享Application
(因此您必须提供用于读写的线程同步,例如lock
语句)。
答案 4 :(得分:0)
您可以将数据存储在会话变量中,但我完全不喜欢该选项。 Session变量依赖于键来提取其值,它不是强类型的,如果要对应用程序进行负载平衡,则需要一种更精细的方法来使服务器之间的会话保持同步。
我们为这种类型的需求使用一个Class库,它包含我们需要检索的特定数据的Singleton。下面的示例将仅从数据库中检索Permissions列表一次,并将其缓存在单例中。它可以从您的所有页面访问。
/// <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;
}
}
这应符合您的要求。