Mon commentaire a été supprimé parce que j'ai fourni un lien vers une question similaire à laquelle j'ai répondu. aquí . Par conséquent, je vais répondre de manière plus descriptive cette fois-ci. C'est parti.
Vous pouvez le faire facilement en créant un CreateRoles
dans votre startup
classe. Cela permet de vérifier si les rôles sont créés, et de les créer s'ils ne le sont pas, au démarrage de l'application. Ainsi.
private async Task CreateRoles(IServiceProvider serviceProvider)
{
//initializing custom roles
var RoleManager = serviceProvider.GetRequiredService<RoleManager<IdentityRole>>();
var UserManager = serviceProvider.GetRequiredService<UserManager<ApplicationUser>>();
string[] roleNames = { "Admin", "Manager", "Member" };
IdentityResult roleResult;
foreach (var roleName in roleNames)
{
var roleExist = await RoleManager.RoleExistsAsync(roleName);
if (!roleExist)
{
//create the roles and seed them to the database: Question 1
roleResult = await RoleManager.CreateAsync(new IdentityRole(roleName));
}
}
//Here you could create a super user who will maintain the web app
var poweruser = new ApplicationUser
{
UserName = Configuration["AppSettings:UserName"],
Email = Configuration["AppSettings:UserEmail"],
};
//Ensure you have these values in your appsettings.json file
string userPWD = Configuration["AppSettings:UserPassword"];
var _user = await UserManager.FindByEmailAsync(Configuration["AppSettings:AdminUserEmail"]);
if(_user == null)
{
var createPowerUser = await UserManager.CreateAsync(poweruser, userPWD);
if (createPowerUser.Succeeded)
{
//here we tie the new user to the role
await UserManager.AddToRoleAsync(poweruser, "Admin");
}
}
}
et ensuite vous pourriez appeler le CreateRoles(serviceProvider).Wait();
de la méthode Configure
dans la classe Startup. Assurez-vous que vous avez IServiceProvider
en tant que paramètre dans le Configure
classe.
Utilisation de l'autorisation basée sur les rôles dans un contrôleur pour filtrer l'accès des utilisateurs : Question 2
Vous pouvez le faire facilement, comme ceci.
[Authorize(Roles="Manager")]
public class ManageController : Controller
{
//....
}
Vous pouvez également utiliser l'autorisation basée sur les rôles dans la méthode d'action comme suit. Attribuez plusieurs rôles, si vous le souhaitez
[Authorize(Roles="Admin, Manager")]
public IActionResult Index()
{
/*
.....
*/
}
Bien que cela fonctionne bien, pour une meilleure pratique, vous pouvez lire l'article sur l'utilisation des contrôles de rôle basés sur des politiques. Vous pouvez le trouver sur la documentation ASP.NET core aquí ou cet article que j'ai écrit à ce sujet aquí
0 votes
Savez-vous comment identifier les rôles des utilisateurs lors de la connexion ?