asp.net mvc通过窗体进行用户的验证(基于角色)_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > asp.net mvc通过窗体进行用户的验证(基于角色)

asp.net mvc通过窗体进行用户的验证(基于角色)

 2013/7/30 23:09:41  蒋叶湖  博客园  我要评论(0)
  • 摘要:、首先在web.config文件中进行窗体验证的配置如下:<authenticationmode="Forms"><formsloginUrl="~/Home/LogOn"timeout="2880"/></authentication>这样的配置,表示,如果在某个action上面使用了Authorize的属性设置,而刚好用户没有进行登录,那么页面就会导向登录的界面进行登录。二、建立用户信息类如下:publicclassUser{publicintID
  • 标签:.net ASP.NET MVC net 用户

、首先在web.config文件中进行窗体验证的配置如下:

 <authentication mode="Forms">       <forms loginUrl="~/Home/LogOn" timeout="2880" />  </authentication> 这样的配置,表示,如果在某个action上面使用了Authorize的属性设置,而刚好用户没有进行登录,那么页面就会导向登录的界面进行登录。 二、建立用户信息类如下:  public class User     {         public int ID { get; set; }         [Display(Name = "姓名")]         [Required(ErrorMessage = "姓名不能为空")]         public string Name { get; set; }           [DisplayName("密码")]         [Required(ErrorMessage = "密码不能为空")]         [DataType(DataType.Password)]         public string Password { get; set; }         /// <summary>         /// 这个是表示是否永久在客户端保存用户名         /// </summary>         [DisplayName("记住我?")]         public bool RememberMe { get; set; }           public Roles Roles { get; set; }     }     /// <summary>     /// 角色信息类(基于角色)     /// </summary>     public class Roles     {         public int ID { get; set; }         public string Name { get; set; }     } 三、逻辑接口       public interface IUserBusiness     {         /// <summary>         /// 根据用户名获取该用户的角色名         /// </summary>         /// <param name="userName">用户名</param>         /// <returns></returns>         Roles GetRoles(string userName);         /// <summary>         /// 获取通过验证后的用户名和密码         /// </summary>         /// <param name="userName">用户名</param>         /// <param name="password">密码</param>         /// <returns></returns>         User GetByUserNamePassword(string userName, string password);         /// <summary>         /// 将通过验证的用户信息写入cookie中         /// </summary>         /// <param name="userName"></param>         /// <param name="createPersistenCookie"></param>         void SignIn(string userName, bool createPersistenCookie);         /// <summary>         /// 注销(删除cookie中用户的信息)         /// </summary>         void SignOut();     } 四、实现接口  public class UserBusiness : IUserBusiness     {         private static User[] userList = new User[]          {              new User(){ID=1,Name="张三",Password="123456",Roles= new Roles(){ID=101,Name="employee"}},             new User(){ID=2,Name="李四",Password="123456",Roles=new Roles(){ID=102,Name="manager"}},             new User(){ID=3,Name="admin",Password="admin",Roles=new Roles(){ID=103,Name="admin"}}         };         public Roles GetRoles(string userName)         {             return userList.                 Where(u => u.Name == userName).                 Select(o => o.Roles).                 FirstOrDefault();         }         public User GetByUserNamePassword(string userName, string password)         {             return userList.FirstOrDefault(u => u.Name == userName && u.Password == password);         }         public void SignIn(string userName, bool createPersistenCookie)         {             if (string.IsNullOrEmpty(userName)) throw new ArgumentException("值不能为空或者null", "userName");             FormsAuthentication.SetAuthCookie(userName, createPersistenCookie);         }         public void SignOut()         {             FormsAuthentication.SignOut();         }     } 五、动作的设计   public IUserBusiness UserBusiness { get; set; }         protected override void Initialize(System.Web.Routing.RequestContext requestContext)         {             if (UserBusiness == null) { UserBusiness = new UserBusiness(); }             base.Initialize(requestContext);         }         [Authorize]//这个表明只有经过验证的用户就能访问         public ActionResult Index()         {             return View();         }         [Authorize(Roles="admin")]//这个权限更高,而且还必须是角色名为admin的才能访问         public ActionResult ShowResult()         {             return View();         } 六、最后

在之前我们加入了Roles也在业务逻辑里面添加了获取Role的方法,那么我们在什么时候来取得该用户的Role呢?

我觉得是在页面验证之后要授权时,该方法在全局的Global.asax中,我们需要委托该事件。

委托时我们再去根据当前用户获取角色,或者此时早已经将角色获取好了,只是加入到系统的Context之用。

 

public MvcApplication()

        {

            AuthorizeRequest += new EventHandler(MvcApplication_AuthorizeRequest);

        }

 

        void MvcApplication_AuthorizeRequest(object sender, EventArgs e)

        {

            IIdentity id = Context.User.Identity;

            if (id.IsAuthenticated)

            {

                var roles = new UserBusiness().GetRoles(id.Name);

                string[] roleList = new string[] { roles.Name};

                Context.User = new GenericPrincipal(id, roleList);

            }

        }

发表评论
用户名: 匿名