Я хочу сделать авторизацию в .Net Core, но я не хочу использовать таблицы Identity DB.У меня есть таблицы User, Role и UserRoles.Я хочу иметь возможность войти в систему с помощью пользователя, авторизовать методы с помощью CustomAuthorize и использовать эти привилегии в представлении.
Я выполнил вход в систему и CustomAuthorize, но не могу использовать в представлении ..
Логин
public IActionResult LoginUser(string returnUrl)
{
ViewBag.returnUrl = returnUrl;
return View();
}
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> LoginUser(LoginModel loginModel, string returnUrl)
{
var userCheck = UnitOfWork.Users.ValidateUser(loginModel.EmailAddress, loginModel.Password);
if (ModelState.IsValid && userCheck != 0)
{
User user = UnitOfWork.Users.Query(x => x.EmailAddress == loginModel.EmailAddress && x.Password == loginModel.Password).FirstOrDefault();
if (user != null)
{
var claims = new List<Claim>
{
new Claim(ClaimTypes.Name, user.Id.ToString())
};
var userIdentity = new ClaimsIdentity(claims, "login");
ClaimsPrincipal principal = new ClaimsPrincipal(userIdentity);
await HttpContext.SignInAsync(principal);
}
return Redirect(returnUrl ?? "/");
// return RedirectToAction("Index", "Home");
}
else
{
ModelState.AddModelError("", "Kullanıcı adı veya şifre geçersiz!");
}
return View(loginModel);
}
CustomAuthorizeAttribute
public class AuthorizeUserAttribute : AuthorizeAttribute, IAuthorizationFilter
{
private readonly IUnitOfWork _unitOfWork = new UnitOfWork.UnitOfWork.UnitOfWork();
// Custom property
public string AccessView { get; set; }
public string AccessInsert { get; set; }
public string AccessUpdate { get; set; }
public string AccessDelete { get; set; }
public string AccessFileView { get; set; }
public string AccessFileInsert { get; set; }
public string AccessFileDelete { get; set; }
public string NotifyUrl { get; set; } = "/Home/Index";
public void OnAuthorization(AuthorizationFilterContext context)
{
var user = context.HttpContext.User;
if (!user.Identity.IsAuthenticated)
{
return;
}
var userInfoModel = AppHttpContext.Current.Session.GetStringToObject<UserInfoModel>("UserInfo") ??
new UserInfoModel();
if (AccessUpdate != "Modul")
{
context.Result = new StatusCodeResult((int) System.Net.HttpStatusCode.Forbidden);
context.Result = new RedirectResult(NotifyUrl);
return;
}
}
}
Использование CustomAuthorize в контроллере
[AuthorizeUser(AccessUpdate = "Modul", NotifyUrl = "/Modul/ListModul")]
public IActionResult Index()
{
return View();
}
КакЯ могу использовать CustomAuthorize на страницах просмотра, как это ..?но без политики.
@if ((await AuthorizationService.AuthorizeAsync(User, "PolicyName")).Succeeded)
{
<p>This paragraph is displayed because you fulfilled PolicyName.</p>
}
Спасибо,