簡體   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