【发布时间】:2020-11-03 01:04:34
【问题描述】:
我遇到了授权属性问题,即使我为管理员和经理设置了角色,它也总是被拒绝。这是 stadnard login identiy 页面的代码我有一种感觉我错过了一些东西,当用户登录时他们应该被添加到角色中?我正在使用 .net core 3.1 和 ef core
我觉得我需要使用或找到用户所属的角色并将其分配给它的东西?
await userStore.AddToRoleAsync(user, "admin");
在下面的某个地方
public async Task<IActionResult> OnPostAsync(string returnUrl = null)
{
returnUrl = returnUrl ?? Url.Content("~/");
if (ModelState.IsValid)
{
// This doesn't count login failures towards account lockout
// To enable password failures to trigger account lockout, set lockoutOnFailure: true
var result = await _signInManager.PasswordSignInAsync(Input.Email, Input.Password, Input.RememberMe, lockoutOnFailure: false);
if (result.Succeeded)
{
var user = await _userManager.FindByEmailAsync(Input.Email);
string Intitals = user.FirstName.Substring(0, 1) + user.LastName.Substring(0, 1);
_contextAccessor.HttpContext.Session.SetString("Intitals", Intitals);
_logger.LogInformation("User logged in.");
return LocalRedirect(returnUrl);
}
if (result.RequiresTwoFactor)
{
return RedirectToPage("./LoginWith2fa", new { ReturnUrl = returnUrl, RememberMe = Input.RememberMe });
}
if (result.IsLockedOut)
{
_logger.LogWarning("User account locked out.");
return RedirectToPage("./Lockout");
}
else
{
ModelState.AddModelError(string.Empty, "Invalid login attempt.");
return Page();
}
}
// If we got this far, something failed, redisplay form
return Page();
}
编辑 2
我什至尝试将其添加到启动中,但当我将用户放在正确的组中时,我仍然无法访问。
services.AddAuthorization(options =>
options.AddPolicy("MISSystem",
policy => policy.RequireClaim("manager", "admin", "agent")));
编辑 3 下面的人没有为我解决它,所以我在这里创建了一个可复制的版本。
https://github.com/davidbuckleyni/AuthorisationRepoMS
在我忘记包含我的声明工厂代码之前,我将在下面包含。
using Microsoft.AspNetCore.Identity;
using Microsoft.Extensions.Options;
using MISSystem.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Claims;
using System.Threading.Tasks;
namespace MISSystem.Web.Helpers {
public class MyUserClaimsPrincipalFactory : UserClaimsPrincipalFactory<ApplicationUser> {
public MyUserClaimsPrincipalFactory(
UserManager<ApplicationUser> userManager,
IOptions<IdentityOptions> optionsAccessor)
: base(userManager, optionsAccessor) {
}
protected override async Task<ClaimsIdentity> GenerateClaimsAsync(ApplicationUser user) {
var identity = await base.GenerateClaimsAsync(user);
identity.AddClaim(new Claim("FullName", user.FirstName + " " + user.LastName ?? "[Click to edit profile]"));
return identity;
}
}
}
【问题讨论】:
标签: c# asp.net-core asp.net-identity ef-core-3.1