2011-10-20 5 views
0

J'essaye de faire un module de connexion avec la page principale de vue. Premier accès utilisateur à une page d'accueil avec un formulaire de connexion, lorsque l'utilisateur clique sur login, la page doit d'abord rediriger vers un UserLoginController, puis rediriger vers un autre PanelController qui contient toutes les pages avec la même page maître. Je veux montrer différents menus avec la permission de différents utilisateurs. Comme je me réfère à un article http://www.asp.net/mvc/tutorials/passing-data-to-view-master-pages-cs je crée une classe abstraite ApplicationController, le PanelController l'hériter. Dans le constructeur, je veux obtenir les informations de l'utilisateur de connexion pour identifier l'autorisation de l'utilisateur, mais il semble que Request et Session ne sont pas disponibles. Pls voir le code.Transférer des données à ApplicationController

D'abord la connexion Javascript

<script type="text/javascript" language="javascript"> 
    $(document).ready(function() { 
     $(btnLogin).click(function() { 
      var sso = $(txtSSO).val(); 
      var pwd = $(txtPwd).val(); 
      if (sso == "") 
      { alert("Please input your SSO number"); } 
      else if (pwd == "") 
      { alert("Please input your password"); } 
      else { 
       jQuery.ajax(
       { url: '<%:Url.Action("UserLogin", "UserLogin")%>', 
        data: { sso: sso, pwd: pwd }, 
        success: function (data) { 
         window.location = '<%: Url.Action("Demo","Panel") %>'; 
        } 
       } 
       ); 
      } 
     }); 
    }); 

</script> 

Le UserLoginController

public ActionResult UserLogin() 
    { 
     string sso = ""; 
     string pwd = ""; 
     try 
     { 

      if (Request.IsAjaxRequest()) 
      { 
       sso = Request.Params["sso"].ToString(); 
       pwd = Request.Params["pwd"].ToString(); 
      } 

      Regex reg = new Regex("^[0-9]{9}$"); 
      if (!reg.Match(sso).Success || pwd == "") 
      { 
       ViewData["errorMsg"] = "Either your UserID or your Password is incorrect"; 
       return View("Index"); 
      } 
      SystemAdminEntities entity = new SystemAdminEntities(); 
      var result = entity.ValidateUserLogin(sso, pwd).FirstOrDefault(); 

      if (result == 1)//User is found 
      { 
       int isso = Convert.ToInt32(sso); 
       var dbEmp = (from e in entity.sys_employee 
          where e.sso == isso 
          select e); 
       SysEmployee emp = dbEmp.FirstOrDefault<SysEmployee>(); 
       LogonUserModel currentUser = LogonUserModel.GetUser(); 
       currentUser.CopyUserInfo(emp); 

       //FormsAuthenticationTicket ticket=new 
       FormsAuthentication.SetAuthCookie(currentUser.SSO.ToString(), true); 
       Session.Add("emp", currentUser); 
       this.Session.Add("sso", currentUser.SSO); 
       this.Session.Add("empid", currentUser.EmpID); 
       this.Session.Add("ename", currentUser.EName); 
       return RedirectToAction("Demo", "Panel");//重定向到 Demo 
      } 
      else if (result == 0)//User is not found 
      { 
       ViewData["errorMsg"] = "User isn't found"; 
       return View("Index"); 
      } 
      else if (result == 2)//Password not correct 
      { 
       ViewData["errorMsg"] = "Password Error"; 
       return View("Index"); 
      } 
      return View("Index"); 
     } 
     catch { return View("Index"); } 
    } 

Le ApplicationController

public abstract class ApplicationController : Controller 
{ 
    private SystemAdminEntities _entities = new SystemAdminEntities(); 

    public ApplicationController() 
    { 
     //根据人员判断权限 
     int sso = 0;//= Request.Form["sso"].ToString(); 
     try 
     { 
      sso = int.Parse(Session["sso"].ToString()); 
      var e = (from emp in _entities.sys_employee//得到对应的用户 
        where emp.sso == sso 
        select emp 
       ); 
      SysEmployee loginUser = e.FirstOrDefault<SysEmployee>(); 
      ViewData["modules"] = loginUser.SysHasPerm; 
     } 
     catch 
     { 
      ViewData["modules"] = null; 

     } 

    } 

Le PanelController

public class PanelController : ApplicationController 
{ 

    // 
    // GET: /Panel/ 

    public ActionResult Index() 
    { 
     return View(); 
    } 

    public ActionResult Demo() 
    { 
     return View(); 
    } 

} 

Répondre

Questions connexes