2013-06-12 1 views
0

나는 사용자 인증이 인증을 위해 꽤 잘 작동mvc C# URL을 변경하면 다른 사용자로 로그인하게되는데 어떻게 방지 할 수 있습니까?

Home Controller: 
    ------------------ 
    [AllowAnonymous] 
    [HttpPost] 
    public JsonResult JsonLogin(SecurityDTO usr) 
    { 
     var cnt = _ipres.CheckLoginCount(usr); 

     if (cnt == 1) 
     { 
      var logDet = _ipres.GetUser(usr); 
      if (logDet != null) 
      { 
       var dto = new SecurityDTO 
       { 
        Id = logDet.Id, 
        UserName = logDet.username, 
        Password = logDet.password, 
        Email = logDet.Emailid, 
        UTID = logDet.UTID, 
       }; 
       Session[USER] = dto; 
      } 
      if (logDet != null) 
      { 
       switch (logDet.UTID) 
       { 
        case 1: 
         Session["UType"] = "admin"; 
         return Json(new { success = true, redirect = Url.Action("Index", "Admin", new { area = "Admin" }) }); 
        case 2: 
         Session["UType"] = "user"; 
         return Json(new { success = true, redirect = Url.Action("Index", "User", new { area = "User" }) }); 
        case 3: 
         Session["UType"] = "client"; 
         return Json(new { success = true, redirect = Url.Action("Index", "Client", new { area = "Client" }) }); 
        default: 
         Session["UType"] = null; 
         break; 
       } 
      } 
     } 
     else 
     { 
      ModelState.AddModelError("", "Invalid Username or Password"); 
     } 
     return Json(new { errors = GetErrorsFromModelState() }); 
    } 

    Base Controller: 
    ------------------ 
    public SecurityDTO UDTO { get; set; } 

    protected override void OnActionExecuting(ActionExecutingContext act) 
    { 
     if (Session["UType"] != null) 
     { 
      UDTO = (SecurityDTO)Session[HomeController.USER]; 
      base.OnActionExecuting(act); 
     } 
     else 
      act.Result = RedirectToAction("Index", "Home", new { area = "" }); 
    } 

에 대해 다음 코드를 사용하고 있습니다. 로그인 성공 후 사용자 유형에 따라 사용자를 지역으로 리디렉션합니다. 지역의 모든 컨트롤러는 기본 컨트롤러를 구현합니다. 최근에 나는 이유를 이유로이 효과가 없다고 판결했다. 사용자로 로그인하면 내 URL은 ~/AppName/User/User/ViewName이됩니다. 하지만 URL을 변경하고 ~/AppName/Admin/Admin/ViewName으로 변경하면 관리자가 아닐지라도 해당 페이지로 이동합니다. 나는 여전히 사용자로 로그인되어 있지만 모든 관리 기능에 액세스 할 수 있습니다. 기본적으로 url에서 사용자 유형을 변경하면 해당 사용자 유형으로 간주됩니다. 그러나 URL 변조가 이와 같이 발생하면 사용자를 로그인 페이지로 리디렉션 할 수 있습니다. 기본 컨트롤러의 사용자 유형 변경을 인식하고 사용자를 로그인 페이지로 리디렉션하는 것과 같은 작업을 수행 할 수 있습니까? 이 일을 올바른 방법을 보여주십시오 ... 미리 감사드립니다. 사용자가 그 리디렉션 다른 페이지로 권한을가 있는지 확인할 경우

답변

0

당신은 페이지 수준 인증을 추가 할 수 있습니다, 또한 대답 인 Vinay에 대한 https://stackoverflow.com/a/5184363/87956

+0

감사에서 봐 가지고,하지만 난 방지하기 위해 기본 컨트롤러에 할 수있는 일이있다 페이지 수준 인증? UDTO는 사용자가 속한 레벨을 알려줍니다. 나는 그가 접근하고자하는 레벨 페이지를 알 필요가있다. 관리자 인 경우 로그인 페이지가 표시됩니다. 기본 컨트롤러에서 Route 매개 변수 또는 URL 경로를 가져 와서 자체 권한을 부여 할 수 있습니까? 미리 감사드립니다. – Kittu

관련 문제