ASP.NET如何从PostgreSQL数据库中检查用户角色?

时间:2018-09-12 03:25:57

标签: c# asp.net postgresql permissions

我是C#和asp.net的新手。

在我的asp.net项目中,我有一个下拉列表,显示来自postgreSQL数据库的信息取决于登录的用户。这是我的代码:

 protected void Button6_Click(object sender, EventArgs e)
    {
   //here's GridView settings, connections strings etc...

 NpgsqlCommand cmd = new NpgsqlCommand();
            NpgsqlDataAdapter sqlDa1 = new NpgsqlDataAdapter("SELECT * FROM vacations", conn); //show by executor
            DataTable dtbl1 = new DataTable();
            if ((string)Session["Name"] == "Smith")
            {
                sqlDa1.Fill(dtbl1);
                GridView1.DataSource = dtbl1;
                GridView1.DataBind();
            }
            else System.Diagnostics.Debug.WriteLine("You do not have permissions!!!");

问题是,我不仅会有一个用户,所以我不能将每个新用户添加到我的 if(){} else 语句中。我如何自动检查用户权限并取决于它显示/不显示信息

1 个答案:

答案 0 :(得分:0)

一种解决方案是创建不同的角色,并与不同的权限相关联。例如,r_visitor和r_administrator。您可以将每个用户添加到适当的角色

然后,您可以在数据库级别授予角色权限,并根据您的要求,使用以下返回布尔值的查询来检查应用程序是否是用户具有给定角色:

SELECT EXISTS(
  SELECT b.rolname rname,
         c.rolname mname 
  FROM pg_auth_members a, 
       pg_roles b, 
       pg_roles c  
  WHERE a.roleid=b.oid 
   AND a.member = c.oid 
   AND b.rolname = 'r_visitor' 
   AND c.rolname='johnDoe');

如果您想了解继承角色(userA属于R1,它是R2的一部分->我们想知道userA是否具有R2特权),请看一下实现递归查看方式的answer