c# - 如何为 MVC .Net Core 应用创建单个管理员用户

标签 c# asp.net-mvc authentication asp.net-core

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

如何才能让任何拥有管理员用户名和密码的人都可以访问这些页面,并且会一直知道他们已登录?我已经有一个系统可以接受用户输入,如果输入正确则继续进入管理页面。但问题是,如果有人决定直接进入 Admin/AddProduct 等页面。我需要我的应用知道他们还不允许访问 AddProduct 页面并将他们重定向回登录页面。

最佳答案

乔伊,这是你的做法

您可以通过在 startup 类中创建一个 CreateRoles 方法轻松地做到这一点。这有助于检查角色是否已创建,如果没有则创建角色;在应用程序启动时。就像这样。

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 类的 Configure 方法调用 await CreateRoles(serviceProvider); 方法。 确保将 IServiceProvider 作为 Configure 类中的参数。

问题 2:“如何才能让任何拥有管理员用户名和密码的人都可以访问这些页面”

您可以像这样轻松地做到这一点。

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

您也可以像这样在操作方法中使用基于角色的授权。如果愿意,分配多个角色

[Authorize(Roles="Admin")]
public IActionResult Index()
{
/*
 .....
 */ 
}

虽然这工作正常,但为了更好的实践,您可能需要阅读有关使用基于策略的角色检查的信息。您可以在 ASP.NET 核心文档中找到它 here ,或者我写的这篇文章here

关于c# - 如何为 MVC .Net Core 应用创建单个管理员用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43731437/

相关文章:

java - 如何向运行 solr 的 Jetty Web 服务器添加自定义身份验证

c# - 如何将 List<string> 转换为所需格式的数据集

c# - 如何通过Selenium和Webdriver提高执行速度

jquery - 将 Json 数据传递到 MVC Razor View

firebase - 使用 Flutter ChangeNotifierProvider 进行身份验证

android - Django 网站作为带有 Google+ 登录的后端

c# - 泛型类型的单元测试

c# - 序列化为 JSON 时如何将属性分组到子对象中

c# - MVC 正则表达式验证电子邮件

jquery - 使用 DataTables 时 AJAX Post 不再起作用