如何根据ASP .NET中的页面查看权限检查用户查看页面的权限?

时间:2014-08-05 19:51:31

标签: c# asp.net permissions

我迷失了这个问题。

我有一个使用Active Directory成员身份的ASP .NET / C#(非MVC)站点,这部分工作正常。我现在需要为站点的页面设置权限,并为用户提供查看页面的适当权限。但是,这是一个很大,但也是,我不能使用角色管理器,因为AD角色设置不正确,我不能使用SQL角色管理,因为高级程序员希望能够限制用户不仅仅是网页,而且如有必要,可以从网页限制用户使用按钮,TxtBox等。

我知道我可以在Masterpage中放置代码来检查每个请求的用户权限。我也知道我将使用SQL表来保存用户(用户名),权限(管理员,查看表单页面等)和userHasPermissions(Joe有Admin,Bob有查看表单等)。

我迷失的地方:

我对如何设置页面权限感到很遗憾。怎么说'联系'页面需要管理员权限,人员目录只需要查看权限吗?我会使用自定义web.sitemap吗?或者它会进入我的数据库?我在网站上有很多页面,那么最好的方法是什么呢?

如果他们没有权限,我如何捕获页面请求以检查所需权限然后取消它(抛出异常)?

如果我错了,请纠正我。但我必须不断从我的母版页查询数据库以检查权限。正确?

对不起所有问题。

感谢任何帮助。感谢。

1 个答案:

答案 0 :(得分:0)

老实说,修复AD比写一个解决方法更有意义。如果您决定修复AD角色/安全组,我会在底部留下原始答案。

如果您使用SQL表来存储用户及其角色,则只运行一个查询,根据您想要的角色创建数据集,如果数据集返回行,您知道匹配,您可以从那里执行逻辑(隐藏按钮,重定向到拒绝访问的页面等)。

 using (SqlConnection conn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString))
 using (SqlDataAdapter da = new SqlDataAdapter("SELECT <USER> FROM <User_Roles> WHERE <USER> = @User AND <ROLE> = @Role", conn))
    {
    da.SelectCommand.Parameters.Add("@User", SqlDbType.VarChar).Value = HttpContext.Current.User.Identity.Name;
    da.SelectCommand.Parameters.Add("@Role", SqlDbType.VarChar).Value = "Admin";
         DataSet ds = new DataSet();
         da.Fill(ds);
         if (ds.Tables[0].Rows.Count > 0)
         {
                  //Make things available          
         }
         else
         {
                  //Make things unavailable or hidden         
         }
    }

推荐答案: 修复您的SG并将其放在每个页面上以定义谁有权限,如果他们没有权限将他们重定向到拒绝访问页面。

if (!(Page.User.IsInRole("Domain\\Security Group")) && !(Page.User.IsInRole("Domain\\SG2"))
                && !(Page.User.IsInRole("Domain\\SG3")) && Page.User.Identity.Name != "Domain\\USER")
            {
                Server.Transfer("~/AccessDenied.aspx");
            }

然后在拒绝访问页面上只需抓取用户名并将消息转发给用户

public void GetUserName()
{
    string userName = HttpContext.Current.User.Identity.Name;
    Response.Write(userName.ToString());
}

ASP

<section>
     Access denied to <% GetUserName(); %>
</section>