【问题标题】:How to check users permissions to view page against the pages view permission in ASP .NET?如何根据 ASP .NET 中的页面查看权限检查用户查看页面的权限?
【发布时间】:2014-09-28 14:34:12
【问题描述】:

我在这个问题上迷路了。

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

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

我迷路的地方:

我不知道如何设置页面权限。我怎么说'联系人'页面需要管理员权限,而员工目录只需要查看权限?我会使用自定义 web.sitemap 吗?还是会进入我的数据库?我的网站上有很多页面,那么最好的方法是什么?

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

如果我错了,请纠正我。但我将不得不不断地从我的母版页查询数据库以检查权限。对吧?

抱歉所有问题。

感谢任何帮助。谢谢。

【问题讨论】:

    标签: c# asp.net permissions


    【解决方案1】:

    老实说,修复 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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-31
      • 2010-11-01
      • 2012-11-17
      • 2015-10-30
      • 2020-12-02
      • 1970-01-01
      • 2016-11-02
      • 1970-01-01
      相关资源
      最近更新 更多