如何在ASP.Net Core中添加新角色?

时间:2017-05-16 10:51:17

标签: authentication asp.net-core authorization

我是asp.net核心的新手,想知道如何在ASP.Net Core中添加我的自定义角色。例如卖家,买家等,所以我可以限制他们采取某些行动。

我现在使用默认的ASP.Net Core模板和单独的用户身份验证。

1 个答案:

答案 0 :(得分:2)

我在这里已经多次回答过这个问题了,由于这个问题,我决定写一篇关于它的文章here。但是,我会再次回答。

以下是你如何使用Wajahat

您可以通过在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作为参数。

将他们限制为某些操作。您可以轻松定义哪些角色可以访问某些控制器或控制器操作,如此。

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

您也可以在动作方法中使用基于角色的授权。如果您将

分配多个角色
[Authorize(Roles="Admin")]
public IActionResult Index()
{
/*
 .....
 */ 
}

虽然这种方法很好,但为了更好的做法,您可能希望阅读有关使用基于策略的授权或角色检查的信息。您可以在ASP.NET核心文档here上找到它,或者我写的关于它的文章here