我的角色有点问题,如果我登录需要在栏菜单中显示我的名字,如果我不使用角色,这项工作正常,但是当我尝试使用我的角色时,检查不再工作。抱歉,我的英文不好
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
protected void Application_AuthenticateRequest()
{
// Check if user is logged in
if (User == null) { return; }
// Get username
string username = Context.User.Identity.Name;
// Declare array of roles
string[] roles = null;
using (Db db = new Db())
{
// Populate roles
UsuarioDTO dto = db.Usuario.FirstOrDefault(x => x.Login == username);
roles = db.RegraUsuario.Where(x => x.UsuarioId == dto.Id).Select(x => x.Regra.Nome).ToArray();
}
// Build IPrincipal object
IIdentity userIdentity = new GenericIdentity(username);
IPrincipal newUserObj = new GenericPrincipal(userIdentity, roles);
// Update Context.User
Context.User = newUserObj;
}
在我的Loyout.html中
<ul class="nav navbar-nav">
@Html.Action("PaginaMenupartial", "Paginas")
@if(Request.IsAuthenticated)
{
//if user is loged show logout
<li><a href="/conta/logout">Sair</a></li>
}
else
{
if (ViewBag.Tile == "Login")
{
<li class="active"><a href="/conta/login">Entrar</a></li>
}
else
{ //if user is not loged show login
<li><a href="/conta/login">Entrar</a></li>
}
}
// in this line below is my problem
@if (Request.IsAuthenticated && User.IsInRole("User"))
{
<li>@Html.Action("UsuarioNavPartial","Conta", new { area=""})</li>
}
</ul>
如果我删除并只留下@if(Request.IsAuthenticated)然后工作。 enter image description here 但我添加@if(Request.IsAuthenticated&amp;&amp; User.IsInRole(“User”))不起作用,我检查所有代码,似乎没问题,有人可以帮助我吗?
答案 0 :(得分:0)
确保在数据库中为此特定用户分配了确切的角色。 它必须以完全相同的方式编写。
我还想建议您,您可能希望使用ENUM或CONSTANTS作为角色名称/符号。 这样,拼写错误不会破坏特定页面(如果再次出现拼写错误)。
确保角色名称在整个项目中可访问且相同。
我假设您稍后要更改角色或添加/更新。 这也将有助于未来的发展。