.net MVC3实现不同的角色用不同的登录页面

标题说得含糊,明确一些,就是如何用.net的窗体验证的机制让不同的角色被导向到不同的登录页面。

我们都知道设置窗体验证的各属性的时候,有一个验证未通过的话跳转到哪个url,可是假如系统中不同角色的登录页面是不同的话,你该如何处理呢?

    <authentication mode="Forms">
      <forms loginUrl="~/Login" timeout="2880" />
    </authentication>

我们这么处理,不同的登录页面的路径字符串肯定有它自己的特征,把它抽出来用来作判断依据。

我们用一个通用的login页做转向,也就是说,事实上它只是做跳转,而非真实登录。在这个页面里面,我们判断ReturnUrl有什么特征,跟上一步我们总结出来的特征做对比,符合某个特征,就是某种用户,这时候再手动redirect到该类用户需要对应的登录页就可以了,在MVC3下:

        // 登录页跳转处理页面
        // GET: /Login
        public RedirectResult Login()
        {
            string url = Request["ReturnUrl"];
            if (string.IsNullOrEmpty(url))
            {
                return new RedirectResult("/User/Login");//默认用户的登录页面
            }
            else if (url.ToLower().Contains("/jk"))
            {
                return new RedirectResult("/jka/Login" + "?ReturnUrl=" + url);
            }
            else
            {
                return new RedirectResult("/User/Login" + "?ReturnUrl=" + url);
            }
        }

这样,只要是没有通过用户验证的,都会带着当前的网址被跳转到本项目的/login页,我们根据当前网址含不含”jk”这个特征来判断是否管理员的路径(这个逻辑完全由你们自己的项目定,可以更严格更科学些)

测试通过

posted @ 2012-06-23 17:14  $walker  阅读(1701)  评论(0编辑  收藏  举报