繁体   English   中英

如何基于ASP.NET C#中的用户角色管理不同的内容

[英]How to manage different content based on a user role in asp.net C#

我在SQL Server中具有不同表的结构,该表允许我存储多个角色和用户(在这种情况下,一个User可以处理多个角色)。

当我尝试根据登录用户所具有的角色来显示.aspx中的控件时,要处理是否显示,启用该角色应处理的控件会很累。

我已经有解决方案,但是很难维护。 问题是客户端通常不时请求更新。

在.aspx中根据用户角色启用控件的最佳实践是什么?

为我英语不好的人道歉。

...

...

每次客户登录进入.aspx时,我都会显示具有其角色的不同按钮。 例如,如果某人A具有角色1和2,那么我将显示角色1和2的按钮。我允许他选择他要输入表单的角色。 如果人B只有一个角色(例如:角色3),那么我只加载角色3的内容。

protected void accesos()
    {
        try
        {
            bool acceso1 = false;   
            bool acceso2 = false;   
            bool acceso3 = false;   
            bool acceso4 = false;   

            int count = 0;
            int intparse = -1;

            if (FL.ValidaAcceso(int.Parse(Request.QueryString["IDSubForma"].ToString()), 3, ((clsUsuario)Session["clsUsuario"]).IDUsuario))
            {
                acceso1 = true;  
                count = count + 1;
            }

            if (FL.ValidaAcceso(int.Parse(Request.QueryString["IDSubForma"].ToString()), 2, ((clsUsuario)Session["clsUsuario"]).IDUsuario))
            {
                acceso2 = true; 
                count = count + 1;
            }

            if (FL.ValidaAcceso(int.Parse(Request.QueryString["IDSubForma"].ToString()), 1, ((clsUsuario)Session["clsUsuario"]).IDUsuario))
            {
                acceso3 = true; 
                count = count + 1;
            }

            if (FL.ValidaAcceso(int.Parse(Request.QueryString["IDSubForma"].ToString()), 4, ((clsUsuario)Session["clsUsuario"]).IDUsuario))
            {
                acceso4 = true; 
                count = count + 1;
            }


            if (count > 1)
            {

                intparse = lblAcceso.Text.Equals("") ? 0 : (Int32.TryParse(lblAcceso.Text, out intparse) ? intparse : 0);
                if (intparse <= 0)
                {
                    //IDENTIFICAR QUE BOTONES MOSTRAR
                    if (acceso1 == false)
                    {
                        wcFirmas.Visible = false;
                        btn1.Visible = false;
                    }
                    if (acceso2 == false)
                    {
                        wcFirmas.Visible = false;
                        btn2.Visible = false;
                    }
                    if (acceso3 == false)
                    {
                        wcFirmas.Visible = false;
                        btn3.Visible = false;
                    }
                    if (acceso4 == false)
                    {
                        wcFirmas.Visible = false;
                        btn4.Visible = false;
                    }


                    divMultipleAcceso.Visible = true;
                    divForma.Visible = false;
                }
            }
            else if (acceso1 == true)  
            {
                lblAcceso.Text = "3";
                divForma.Visible = true;
                cargarForma(txtNoLote);

            }
            else if (acceso2 == true)  
            {
                lblAcceso.Text = "2";
                divForma.Visible = true;
                cargarForma(txtNoLote);

            }
            else if (acceso3 == true)  
            {
                lblAcceso.Text = "1";
                divForma.Visible = true;
                cargarForma(txtNoLote);

            }
            else if (acceso4 == true)  
            {
                lblAcceso.Text = "4";
                divForma.Visible = true;
                cargarForma(txtNoLote);

            }
            else
            {
                divForma.Visible = false;
                Master.MostrarMsn("El usuario no cuenta con privilegios de acceso.", 0);
                return;
            }
        }
        catch (Exception ex) { Master.MostrarMsn(ex.Message, 0); }
    } 

我将角色编号保存到标签中,以便在表单的每个控件中进行比较,以查看是否需要显示。 然后我做类似的事情:

if(lblAcceso.Text.Equals("2"))

问题是,如果我向此表单添加额外的角色(例如rol 5),那么我必须修改代码。 目标是尽可能少地修改代码。

谢谢大家到目前为止发表评论。

假设您配置为使用内置的.net角色提供程序,则可以执行此操作

if (this.User.IsInRole("RoleName"))
        {YourControl.Visible = true }

要么

YourControl.Visible = this.User.IsInRole("RoleName")

ASP.net角色管理: https : //msdn.microsoft.com/zh-cn/library/5k850zwb.aspx

 if (!Roles.IsUserInRole(User.Identity.Name, "ROLENAME"))
    {         
      UsersListBox.Visible = false;
      return;
    }

https://msdn.microsoft.com/en-us/library/4z6b5d42(v=vs.110).aspx

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM