Как прочитать значение пользовательских утверждений

#asp.net #asp.net-mvc #asp.net-mvc-4 #claims

Вопрос:

В моем приложении я использовал для хранения доступа пользователей в утверждениях при входе пользователей в систему. Поэтому, когда пользователь вводит имя пользователя и пароль, возвращайте типы доступа и значения, которые затем сохраняются в утверждениях. Вот как я сделал это в контроллере учетных записей.

 public void SignInUser(string username, string userRole, string userid, bool isPersistent, string UserLevel,string AdminPannel, 
            string MasterPannel, string Add_Supplier, string Update_Supplier, string Add_Employee, string Update_Employee,string View_PenReq ,
             string View_ServReq,string View_ReqHis, string View_Inspect, string Authriz_Req, string Sus_CashPay, string Fin_Report)
        {
            // Initialization.    
            var claims = new List<Claim>();
            try
            {
                // Setting    
                claims.Add(new Claim(ClaimTypes.Name, username));
                claims.Add(new Claim(ClaimTypes.Role, userRole));
                claims.Add(new Claim("UserId", userid));
                claims.Add(new Claim("UserLevel", UserLevel));
                claims.Add(new Claim("AdminPannel", AdminPannel));
                claims.Add(new Claim("MasterPannel", MasterPannel));
                claims.Add(new Claim("Add_Supplier", Add_Supplier));
                claims.Add(new Claim("Update_Supplier", Update_Supplier));
                claims.Add(new Claim("Add_Employee", Add_Employee));
                claims.Add(new Claim("Update_Employee", Update_Employee));
                claims.Add(new Claim("View_PenReq", View_PenReq));
                claims.Add(new Claim("View_ServReq", View_ServReq));
                claims.Add(new Claim("View_ReqHis", View_ReqHis));
                claims.Add(new Claim("View_Inspect", View_Inspect));
                claims.Add(new Claim("Authriz_Req", Authriz_Req));
                claims.Add(new Claim("Sus_CashPay", Sus_CashPay));
                claims.Add(new Claim("Fin_Report", Fin_Report));
                

                var claimIdenties = new ClaimsIdentity(claims, DefaultAuthenticationTypes.ApplicationCookie);
                var ctx = Request.GetOwinContext();
                var authenticationManager = ctx.Authentication;
                // Sign In.    
                authenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = isPersistent }, claimIdenties);
                var identity = new ClaimsIdentity(claims, DefaultAuthenticationTypes.ApplicationCookie);
                
                var claimsPrincipal = new ClaimsPrincipal(identity);
                Thread.CurrentPrincipal = claimsPrincipal;
            }
            catch (Exception ex)
            {
                // Info    
                throw ex;
            }
        }
 

Теперь в представлении я хочу проверить, верно ли значение PendingRequest в утверждениях, панель ожидающих запросов будет отображаться пользователю. Мне удалось прочитать данные в заявлении об имени пользователя, выполнив этот код

 @User.Identity.Name
 

Но для чтения этого, Это не работает. Вот код просмотра на панели. Спасибо

 <li class="nav-item">
      <a href="@Url.Action("PendingRequests_Hod","PendingRequest")" class="nav-link">
      <i class="far fa-circle nav-icon"></i>
      <p>Pending Requests</p>
      </a>
</li>  
 

Ответ №1:

Вы можете получить желаемое утверждение, подобное этому:

 var req = (User.Identity as ClaimsIdentity).Claims.Where(c => c.Type == "View_PenReq").FirstOrDefault();
string reqValue = req.Value;