[英]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.