Asp.net mvc 5 在应用程序中按角色限制内容。GetRolesforUser
我有一个MVC5.2应用程序,它利用了ASP.Identity和增强的角色服务。为所有用户分配了一个前缀如下的角色:内部用户的Corporate(如CorporateAdmin)和外部用户的Client(如ClientAdmin) 我有我只想在视图中显示的内容,这些内容只向经过身份验证的外部客户端显示。我尝试了以下多种格式:Asp.net mvc 5 在应用程序中按角色限制内容。GetRolesforUser,asp.net-mvc-5,asp.net-mvc-5.2,Asp.net Mvc 5,Asp.net Mvc 5.2,我有一个MVC5.2应用程序,它利用了ASP.Identity和增强的角色服务。为所有用户分配了一个前缀如下的角色:内部用户的Corporate(如CorporateAdmin)和外部用户的Client(如ClientAdmin) 我有我只想在视图中显示的内容,这些内容只向经过身份验证的外部客户端显示。我尝试了以下多种格式: @if (Request.IsAuthenticated && !Roles.GetRolesForUser().Contains("Corporate")
@if (Request.IsAuthenticated && !Roles.GetRolesForUser().Contains("Corporate"))
{
*Content to be displayed*
}
返回的错误消息是CS0201:只能将赋值、调用、递增、递减、等待和新对象表达式用作语句
我也尝试过:
@if (Request.IsAuthenticated && Roles.GetRolesForUser().Contains("Corporate") == false)
{
*Content to be displayed*
}
及
所有人都收到相同的错误
任何方向都非常感谢。我认为,这一错误意味着GetRolesForUser返回字符串数组,而不是字符串列表。数组未包含方法 尝试:
逻辑有缺陷;GetRoles返回角色列表。您应该检查每个角色,而不是检查公司是否是角色之一。但是,如果列表中有“公司”一词,那么该列表是否会导致bool变为false呢?是的。这就是为什么我没有将此作为答案发布。我怀疑括号之间的代码。你能在没有if的情况下发布或只是测试吗?公司不是一个角色。它是角色的前缀。那么,我必须检查所有前缀为Corporate的角色吗?这似乎是不必要的负担。请尝试使用LINQ:Roles.GetRolesForUser.Existsrole=>role.StartsWithCorporate。在Razor视图中需要@using System.Linq。开始时检查前缀。您可以调用检查前缀、后缀和中缀的Contains。
@if (Request.IsAuthenticated && User.IsInRole("CorporateAdmin") == false)
{
*Content to be displayed*
}
@if (Context.User.IsInRole("Corporate"))
{
"Content to be displayed"
}