.Net Core CustomAuthorize на страницах просмотра - PullRequest
0 голосов
/ 18 октября 2018

Я хочу сделать авторизацию в .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>
}

Спасибо,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...