如何根据asp.net中的页面查看权限检查用户查看页面的权限

本文关键字:权限 何根 检查 用户 asp net | 更新日期: 2023-09-27 18:16:26

我在这个问题上迷路了。

我有一个asp.net/c#(不是MVC)网站,它使用Active Directory成员资格,这部分工作得很好。我现在需要为网站的页面设置权限,并给用户适当的权限来查看页面。但是,这是一个很大的,但太,我不能使用角色管理器,因为AD角色没有正确设置,我不能使用SQL角色管理,因为高级程序员希望能够限制用户不仅从网页,但也能够限制用户从按钮,txtbox,以及更多的从网页,如果有必要。

我知道我可以把代码在主页检查每个请求的用户权限。我还知道我将使用SQL表来保存用户(username)、权限(Admin、查看表单页面等)和userHasPermissions (Joe有Admin, Bob有查看表单等)。

我迷失的地方:

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

如何捕获页面请求以检查所需的权限,然后在没有权限的情况下取消它(抛出异常)?

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

对所有的问题感到抱歉。

任何帮助都是感激的。谢谢。

如何根据asp.net中的页面查看权限检查用户查看页面的权限

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

推荐答案:修复你的SGs并把这个放在每个页面上定义谁有权限,如果他们没有权限重定向到一个拒绝访问的页面。

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>