在ASP.NET Core 3.1 MVC中,你可以使用控制器中的User对象来确定当前用户的角色,并根据用户的角色有条件地渲染HTML内容。下面是一个示例:
首先,确保你已经在Startup.cs文件中配置了身份验证和授权服务。
// Startup.cs
public void ConfigureServices(IServiceCollection services)
{
// ...
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie(options =>
{
options.LoginPath = "/Account/Login";
options.AccessDeniedPath = "/Account/AccessDenied";
});
services.AddAuthorization(options =>
{
options.AddPolicy("AdminOnly", policy =>
policy.RequireRole("Admin"));
});
// ...
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// ...
app.UseAuthentication();
app.UseAuthorization();
// ...
}
接下来,在你的控制器中,你可以使用User对象来检查当前用户的角色,并相应地渲染HTML内容。以下是一个示例:
// HomeController.cs
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
public class HomeController : Controller
{
public IActionResult Index()
{
return View();
}
[Authorize(Roles = "Admin")]
public IActionResult AdminPage()
{
return View();
}
}
在上面的示例中,Index方法不需要用户是管理员,因此不包含[Authorize]特性。而AdminPage方法要求用户是管理员,因此包含[Authorize(Roles = "Admin")]特性。
最后,在你的视图中,你可以使用条件语句来根据用户的角色有条件地渲染HTML内容。以下是一个示例:
Welcome to the website!
@if (User.IsInRole("Admin"))
{
This content is only visible to administrators.
}
Admin Page
This content is only visible to administrators.
在上面的示例中,如果用户是管理员,那么条件语句中的内容将被渲染出来;如果用户不是管理员,那么条件语句中的内容将被忽略。