2017-02-09 8 views
0

複数の役割とユーザーを格納できるSQLサーバーの構造が異なります(この場合、ユーザーは複数の役割を処理できます)。asp.netのユーザー役割に基づいて異なるコンテンツを管理する方法C#

ログインしているユーザーの役割に応じて、.aspxでコントロールを表示すると、表示するかどうか、ロールが処理するコントロールを有効にするかどうかを処理するのが疲れます。

私はすでに解決策を持っていますが、維持するのは難しいです。問題はクライアントが通常更新を随時求めていることです。

ユーザーの役割に応じて.aspxでコントロールを有効にするためのベストプラクティスは何ですか。

私の貧しい人々のための謝罪。

...

...

クライアントloged-では、私は彼が持っている役割を持つ別のボタンを表示する.aspxに入るたびに。たとえば、人物Aがロール1とロール2を持っている場合、ロール1とロール2のボタンが表示されます。フォームに入力するロールを選択できます。人物Bは、(例:ROL 3)一つだけROLを持っている場合、私はちょうど私が見て、フォームのすべてのコントロールでそれを比較するために、ラベルにROL番号を保存ROL 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)に余分ROLを追加した場合、私は、コードを変更する必要があり、次のとおりです。そして、私のような何かをします。目標はできるだけコードを変更しないことです。

これまでのコメントありがとうございました。

+0

これまでに何を試しましたか?解決策を見つけるために共有できるコードがありますか? – gattsbr

+0

これは多くの可能な解決法ではかなり広範な質問です... – VDWWD

+0

あなたは今あなたが現在持っているものを見ることなく、より良い解決策について助言することはできません。何らかの意味のある回答が必要な場合は、このコードを含めてください。 – trailmax

答えて

0

はあなたが行うことができます .NETロールプロバイダに建て使用するように設定されていると仮定すると

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

または

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

yourcontrol(YourControl)はカスタマイズされたUserControlであることに注意してください。したがって、ページ/フォームのコンテンツ全体を実質的に制御することができます – DaniDev

関連する問題