Не могу вытащить данные напрямую в представление MVC Идентификация претензий - PullRequest
2 голосов
/ 02 марта 2020

Привет. У меня проблемы с передачей значений идентификаторов утверждений непосредственно в представление. У меня есть файл Security.cs, и я хотел бы получить доступ через значения в представлении. Например, я ожидаю вернуть @ CurrentUser.DisplayName, но, к сожалению, @CurrentUser не существует, это текущий контекст. Это сбило меня с толку, если честно. Любые идеи, пожалуйста?

Также как редактирование: я могу без проблем передавать значения на свой контроллер.

Ниже мой контроллер безопасности:

 [HttpPost]
    public ActionResult CheckUser(string returnURL)
    {
        ViewBag.ReturnURL = returnURL;
        GRATT.BLL.GratManager gm = new GRATT.BLL.GratManager();

    string username = Request.Form["username"];
    string password = Request.Form["password"];

    GRATT.DTO.AppUser au = gm.GetUser(username, password);

    if (au != null)
    {
        if (Membership.ValidateUser(Request.Form["username"], Request.Form["password"]))
        {
            ClaimsIdentity identity = new ClaimsIdentity(new[]
        {
            new Claim("Username", au.Username.ToString()),
            new Claim("UserId", au.UserId.ToString()),
            new Claim("DisplayName", (au.Name.Forename ?? "") +" "+ (au.Name.Surname ?? "")),
            new Claim("SiteCode", au.Site.ToLower().ToString())
        }, "GratAuditTool_Authentication");


            foreach (GRATT.DTO.UserRole r in au.Roles)
            {
                identity.AddClaim(new Claim("Role", r.Role.Name));
            }


            var ctx = Request.GetOwinContext();
            var authManager = ctx.Authentication;


            authManager.SignIn(identity);
            return RedirectToAction("Index", "Home");
        }


    }
    return RedirectToAction("Login", "Security");
}

И ниже мой файл Security.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Security.Claims;
using System.Web.Mvc;

namespace GrattAuditTool.UI
{
    public class GratAuditToolClaimsPrincipal : ClaimsPrincipal
    {
        public GratAuditToolClaimsPrincipal(ClaimsPrincipal p) : base(p)
        {

    }
    public string DisplayName
    {
        get
        {
            return FindFirst("DisplayName").Value;
        }
    }
    public string UserID
    {
        get
        {
            return FindFirst("UserID").Value;
        }
    }
    public string Initials
    {
        get
        {
            return FindFirst("Initials").Value;
        }
    }
    public Boolean IsAdmin
    {
        get
        {
            return Convert.ToBoolean(FindFirst("Admin").Value);
        }
    }

    public string SiteCode
    {
        get
        {
            return FindFirst("SiteCode").Value;
        }
    }
    public List<string> Roles
    {
        get
        {
            List<string> roles = new List<string>();
            foreach (string s in FindAll("Role").Select(x => x.Value))
            {
                roles.Add(s);
            }
            return roles;
        }
    }

}
public abstract class GratAuditToolController : Controller
{
    public GratAuditToolClaimsPrincipal CurrentUser
    {
        get
        {
            return new GratAuditToolClaimsPrincipal(User as ClaimsPrincipal);
        }
    }
}
public abstract class GratAuditToolViewPage<TModel> : WebViewPage<TModel>
{
    public GratAuditToolClaimsPrincipal CurrentUser
    {
        get
        {
            return new GratAuditToolClaimsPrincipal(User as ClaimsPrincipal);
        }
    }
}
public abstract class GratAuditToolViewPage : GratAuditToolViewPage<dynamic>
{

}

}

...