我正在构建一个基本上是商店的网络应用程序,但我想让网站管理员轻松添加新产品。但是,我想限制网站的这一部分,以便只有管理员才能访问它。此刻我对其他用户没用。
如何使用任何拥有管理员用户名和密码的人都可以访问这些页面,并且知道他们已经登录了?我已经有一个系统接受用户输入,然后继续管理页面,如果它是正确的。但问题是,如果有人决定直接转到Admin / AddProduct这样的页面。我需要我的应用知道他们还不允许他们访问AddProduct页面并将其重定向回登录。
答案 0 :(得分:9)
这是你如何去做Joey
您可以通过在CreateRoles
课程中创建startup
方法轻松完成此操作。这有助于检查角色是否已创建,如果不是,则创建角色;在应用程序启动。像这样。
private async Task CreateRoles(IServiceProvider serviceProvider)
{
//initializing custom roles
var RoleManager = serviceProvider.GetRequiredService<RoleManager<IdentityRole>>();
var UserManager = serviceProvider.GetRequiredService<UserManager<ApplicationUser>>();
string[] roleNames = { "Admin", "Store-Manager", "Member" };
IdentityResult roleResult;
foreach (var roleName in roleNames)
{
var roleExist = await RoleManager.RoleExistsAsync(roleName);
// ensure that the role does not exist
if (!roleExist)
{
//create the roles and seed them to the database:
roleResult = await RoleManager.CreateAsync(new IdentityRole(roleName));
}
}
// find the user with the admin email
var _user = await UserManager.FindByEmailAsync("admin@email.com");
// check if the user exists
if(_user == null)
{
//Here you could create the super admin who will maintain the web app
var poweruser = new ApplicationUser
{
UserName = "Admin",
Email = "admin@email.com",
};
string adminPassword = "p@$$w0rd";
var createPowerUser = await UserManager.CreateAsync(poweruser, adminPassword);
if (createPowerUser.Succeeded)
{
//here we tie the new user to the role
await UserManager.AddToRoleAsync(poweruser, "Admin");
}
}
}
然后您可以从Startup类中的await CreateRoles(serviceProvider);
方法调用Configure
方法。
确保IServiceProvider
类中有Configure
作为参数。
问题2:“如何使用任何拥有管理员用户名和密码的人访问这些页面”
您可以轻松完成此操作。
[Authorize(Roles="Admin")]
public class ManageController : Controller
{
//....
Return View();
}
您也可以在动作方法中使用基于角色的授权。如果您将
分配多个角色[Authorize(Roles="Admin")]
public IActionResult Index()
{
/*
.....
*/
}
虽然这种方法很好,但为了更好的练习,您可能希望阅读有关使用基于策略的角色检查的信息。您可以在ASP.NET核心文档here上找到它,或者我写的关于它的文章here
答案 1 :(得分:2)
将ASP.NET身份添加到项目后,您可以在应用程序中实现Role based Authorization。基本上,它允许您为控制器设置[Authorize(Roles = "Administrator")]
属性,该属性仅供管理员用户使用。