我在SQL Server中有一个不同表的结构,允许我存储多个角色和用户(在这种情况下,用户可以处理多个角色)。
当我尝试根据登录用户所具有的角色转换.aspx中的控件时,它会厌倦处理是否显示,启用或不启用角色应该处理的控件。< / p>
我已经有了解决方案,但很难维护。问题是客户端通常会不时要求更新。
根据用户角色在.aspx中启用控件的最佳做法是什么?
为我可怜的英语道歉。
...
...
每次客户端进入.aspx时,我会显示具有他所拥有角色的不同按钮。例如,如果人A有rol 1和2,那么我显示角色1和2的按钮。我允许他选择他想要输入表单的角色。如果B人只有一个rol(例如:rol 3),那么我只需加载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); }
}
我将rol数字保存到标签中,以便在表单的每个控件中对其进行比较,看看是否需要显示它。然后我做了类似的事情:
if(lblAcceso.Text.Equals("2"))
问题是,如果我在此表单中添加额外的rol(例如,rol 5),那么我必须修改代码。目标是尽可能少地修改代码。
感谢所有发表评论的人。
答案 0 :(得分:0)
假设您已配置为使用内置的.net角色提供程序 你可以做到
if (this.User.IsInRole("RoleName"))
{YourControl.Visible = true }
或
YourControl.Visible = this.User.IsInRole("RoleName")
答案 1 :(得分:0)
ASP.net角色管理: https://msdn.microsoft.com/en-us/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