2015-12-25 165 views
0

我继承了asp.net应用程序,它允许用户访问基于SQL Server数据库字段中值的页面。在加载每个页面时,会运行一个过程来检查用户标识和页面名称,以确定用户标识是否可以访问特定页面。如果access = 'Yes'允许用户查看页面上的所有元素,如果access = 'No'用户已注销系统并重定向到登录屏幕。权限访问页面

我需要做些什么才能存储用户ID在开始时访问的所有页面,因此一旦用户登录,他们只能看到他们有权访问的内容,而不是每个执行的检查用户请求访问页面的时间?

+0

我只有几个级别的权限和几个页面来跟踪,所以我把它们推入会话变量。话虽如此,但从数据库中检查单个用户的时间并不昂贵。 – Bindrid

+0

@Bindrid - 应用程序大约有80页,并且打到数据库并等待响应是我的滞后时间,因为这个服务器也被其他多个程序使用。 – FartStopper

+0

第一次创建用户时,可以在表格中添加名称的页面。 – Hemal

回答

2

我会显示一些代码。 它是这样的。

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 
    } 

根据您的需要更改一些代码。

0

好的,我们在用户登录后使用FormsAuthenticationTicket。随着票证,我们违背数据库,并获得用户的支持和支持。这进入会话变量。 (因为您使用的是asp.net)然后,我们在Global asa中的会话中检查针对该对象的用户页面请求。如果失败,我们将它们发送到登录页面。

+0

这可以保存多个值,还是只能保存一个值?我见过的例子只显示它存储1个值。 – FartStopper

+0

你可以拥有任意数量的角色。我无法想象所有80页都有单独的许可,他们必须分成几个部分,每个部分都会被赋予一个角色。您可以让框架通过缓存来处理用户拥有 –

+0

@ScottSelby权限的角色 - 大多数情况下,他们大约有5个组对同一页面拥有相同权限。但是,有些情况下,某个用户需要访问1个页面,该页面不在其包含的组的默认“页面”中。应如何处理这些实例? – FartStopper