如何为MVC .Net Core应用程序创建一个管理员用户

Joe*_*ley 3 c# asp.net-mvc login asp.net-core

我正在构建一个基本上是商店的网络应用程序,但我希望为网站管理员提供一种简单的方法来添加新产品.但是,我想限制网站的这一部分,以便只有管理员可以访问它.此刻我对其他用户没用.

如何使用管理员用户名和密码的任何人都可以访问这些页面,并且它会坚持知道他们已登录?我已经有一个接受用户输入的系统,然后继续管理页面,如果它是正确的.但问题是,如果有人决定直接转到Admin/AddProduct这样的页面.我需要我的应用程序知道他们还不允许访问AddProduct页面并将它们重定向回登录.

Tem*_*oke 9

这是你如何去做Joey

您可以通过CreateRolesstartup班级中创建方法轻松完成此操作.这有助于检查角色是否已创建,如果不是,则创建角色; 在应用程序启动.像这样.

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");

            }
       }
    }
Run Code Online (Sandbox Code Playgroud)

然后你可以await CreateRoles(serviceProvider);ConfigureStartup类中的方法调用该方法.确保您拥有该类中IServiceProvider的参数Configure.

问题2:"我如何制作,以便任何拥有管理员用户名和密码的人都可以访问这些页面"

你可以这样轻松地做到这一点.

[Authorize(Roles="Admin")]
public class ManageController : Controller
{
   //....
   Return View();
}
Run Code Online (Sandbox Code Playgroud)

您也可以在动作方法中使用基于角色的授权.如果愿意,可以分配多个角色

[Authorize(Roles="Admin")]
public IActionResult Index()
{
/*
 .....
 */ 
}
Run Code Online (Sandbox Code Playgroud)

虽然这样做很好,但为了更好的练习,您可能希望阅读有关使用基于策略的角色检查的信息.你可以在这里的ASP.NET核心文档中找到它,或者我在这里写的关于它的这篇文章


Ale*_*ich 5

将 ASP.NET Identity 添加到项目后,您就可以在应用程序中实现基于角色的授权。基本上它允许您[Authorize(Roles = "Administrator")]为控制器设置属性,该属性仅适用于管理员用户。

  • 使用角色是有点不鼓励和过时的概念。您应该使用基于策略的授权,其中“角色”被视为声明,因为它比角色更灵活 (2认同)