我继承了asp.net
应用程序,它允许用户访问基于SQL Server
数据库字段中值的页面。在加载每个页面时,会运行一个过程来检查用户标识和页面名称,以确定用户标识是否可以访问特定页面。如果access = 'Yes'
允许用户查看页面上的所有元素,如果access = 'No'
用户已注销系统并重定向到登录屏幕。权限访问页面
我需要做些什么才能存储用户ID在开始时访问的所有页面,因此一旦用户登录,他们只能看到他们有权访问的内容,而不是每个执行的检查用户请求访问页面的时间?
我继承了asp.net
应用程序,它允许用户访问基于SQL Server
数据库字段中值的页面。在加载每个页面时,会运行一个过程来检查用户标识和页面名称,以确定用户标识是否可以访问特定页面。如果access = 'Yes'
允许用户查看页面上的所有元素,如果access = 'No'
用户已注销系统并重定向到登录屏幕。权限访问页面
我需要做些什么才能存储用户ID在开始时访问的所有页面,因此一旦用户登录,他们只能看到他们有权访问的内容,而不是每个执行的检查用户请求访问页面的时间?
我会显示一些代码。 它是这样的。
string session_string="";
SqlConnection cn = new SqlConnection(YOUR_CONNECTION_STRING);
cn.open();
SqlCommand cmd = new SqlCommand();
cmd.Connection=cn;
cmd.CommandType=CommandType.Text;
cmd.CommandText="select name_of_pages from permission where username='YOUR_USERNAME'";
SqlDataReader rdr = cmd.ExecuteReader();
if(rdr.hasRows==true){
while(rdr.Read()){
session_string=rdr["name_of_pages"] + ",";//You need to declare this variable globally before
session_string=session_string + rdr["name_of_pages"] + ","; //USE THIS LINE , NOT PREVIOUS ONE
}
}
rdr.close();//DONT FORGET THIS ALSO
cn.close();//DONT FORGET THIS
Session["pages"]=session_string;
//Now to check
if(Session["pages"].Contains("Index.aspx")){
//PERFORM SOMETHING POSITIVE
}
else
{
//PERFORM SOMETHING NEGATIVE
}
根据您的需要更改一些代码。
好的,我们在用户登录后使用FormsAuthenticationTicket。随着票证,我们违背数据库,并获得用户的支持和支持。这进入会话变量。 (因为您使用的是asp.net)然后,我们在Global asa中的会话中检查针对该对象的用户页面请求。如果失败,我们将它们发送到登录页面。
这可以保存多个值,还是只能保存一个值?我见过的例子只显示它存储1个值。 – FartStopper
你可以拥有任意数量的角色。我无法想象所有80页都有单独的许可,他们必须分成几个部分,每个部分都会被赋予一个角色。您可以让框架通过缓存来处理用户拥有 –
@ScottSelby权限的角色 - 大多数情况下,他们大约有5个组对同一页面拥有相同权限。但是,有些情况下,某个用户需要访问1个页面,该页面不在其包含的组的默认“页面”中。应如何处理这些实例? – FartStopper
我只有几个级别的权限和几个页面来跟踪,所以我把它们推入会话变量。话虽如此,但从数据库中检查单个用户的时间并不昂贵。 – Bindrid
@Bindrid - 应用程序大约有80页,并且打到数据库并等待响应是我的滞后时间,因为这个服务器也被其他多个程序使用。 – FartStopper
第一次创建用户时,可以在表格中添加名称的页面。 – Hemal