Считывание значений из представленных утверждений

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

Вопрос:

Я добавил пользовательские утверждения в контроллер учетных записей. Когда пользователь войдет в систему, данные для входа в систему будут добавлены в утверждения.

Вот код,

 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));

                TempData["UserLvl"] = UserLevel;


                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;
            }
        }
 

Но я испытываю трудности при чтении данных в главном представлении.
Например, если значение утверждения для панели администратора равно false, я хочу скрыть меню панели администратора из представления HTML. Я попробовал это, и это не сработает. Вы можете мне в этом помочь ?? Спасибо

  @if (bool.Parse(((System.Security.Claims.ClaimsIdentity)User.Identity).FindFirst("AdminPannel").Value) != true)
{
  <li class="nav-header">Master Forms</li>
   <li class="nav-item">
    <a href="@Url.Action("Index", "M_Company")" class="nav-link"</a>
      <i class="nav-icon fas fa-table"></i><p>
       Add Company</p>
    </a>
   </li>
}
 

Комментарии:

1. Какова стоимость претензии без bool. Разобрать ?

2. Админ-панель @NicolaBiada

Ответ №1:

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

             @{
                var value = ((System.Security.Claims.ClaimsIdentity)User.Identity)?.FindFirst("AdminPannel")?.Value;
                bool flag;
                // if value is "true" or "false"
                bool.TryParse(value ?? "false", out flag)
                
             }
            //now check condition with flag

            if(flag)