我正在构建一个本质上是商店的Web应用程序,但是我想以一种简单的方式让网站管理员添加新产品。但是,我想限制网站的这一部分,以便只有管理员才能访问它。目前我没有其他用户使用。
我该如何做,以便具有管理员用户名和密码的任何人都可以访问这些页面,并且它将始终知道它们已登录?我已经有一个可以接受用户输入的系统,如果正确的话,可以继续进入管理页面。但是问题是,如果有人决定直接直接转到Admin / AddProduct之类的页面。我需要我的应用程序知道他们尚未被允许访问AddProduct页面,并将其重定向回登录名。
这就是你的做法乔伊
通过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("[email protected]");
// 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 = "[email protected]",
};
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");
}
}
}
然后可以await CreateRoles(serviceProvider);
从Configure
Startup类的方法中调用该方法。确保您IServiceProvider
在Configure
类中具有参数。
问题2:“我如何做到这一点,以便具有管理员用户名和密码的任何人都可以访问这些页面”
您可以轻松地做到这一点,就像这样。
[Authorize(Roles="Admin")]
public class ManageController : Controller
{
//....
Return View();
}
您也可以像这样在操作方法中使用基于角色的授权。分配多个角色,如果您愿意
[Authorize(Roles="Admin")]
public IActionResult Index()
{
/*
.....
*/
}
虽然这很好用,但为了更好的实践,您可能需要阅读有关使用基于策略的角色检查的信息。你可以找到它的ASP.NET核心文档在这里,还是这篇文章我写了一篇关于它在这里
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句