[C#][ASP.NET MVC]实做成员和角色管理
[C#][ASP.NET MVC]实做成员和角色管理 在网站安全管理方面,ASP.NET2.0以后提供两大API(Membership、Role), 帮助开发人员快速建立相关安全管理机制, 而MVC架构下我们当然也可以利用这两大API实做管理机制, 自己觉得整体开发时间还满快的(拜MVC所赐XD),这里记录一下。
Add SystemController 公开成员相关属性 #region 成员相关属性 public class UserAttribute { public Guid key { get; set; } public String Username { get; set; } public String Lastlogindate { get; set; } } public class CreateAttribute : UserAttribute//继承UserAttribute { public String Password { get; set; } public String Confirmpw { get; set; } public String Email { get; set; } } public class DetailsAttribute : CreateAttribute//继承CreateAttribute { public String Comment { get; set; } public bool Isapproved { get; set; } public String Createdate { get; set; } public String Lastactivitydate { get; set; } public String Lastlockoutdate { get; set; } } public class EditAttribute : DetailsAttribute//继承DetailsAttribute { public bool IslockedOut { get; set; } public String Lastpasswordchangeddate { get; set; } } #endregion ?Add SystemRepository public class SystemRepository { public List ?Index In Controller [NonAction]//新增自订Url Routing protected RedirectToRouteResult RedirectToUserPage( MembershipUser user ) { var rvd = new RouteValueDictionary( new { controller = ControllerContext.RouteData.Values[ "controller" ],action = "Edit",key = ( Guid ) user.ProviderUserKey } ); return RedirectToRoute( rvd ); } SystemRepository systemrepository = new SystemRepository(); // GET: /System/ //[Authorize(Roles = "Administrators")]//属于Administrators才有权限 public ActionResult Index() { ViewData["Roles"] = Roles.GetAllRoles().ToList(); return View(systemrepository.GetAllusers());//指向systemrepository } 编写virtual method for role #region virtual method for role [AcceptVerbs(HttpVerbs.Post)] public virtual ActionResult CreateRole(String name) { Roles.CreateRole(name);//建立新角色 return RedirectToAction("Index"); } public virtual ActionResult DeleteRole(String name) { Roles.DeleteRole(name);//删除角色 return RedirectToAction("Index"); } public virtual ActionResult AdduserTorole( Guid key,String roleName ) { var user = Membership.GetUser(key); Roles.AddUserToRole(user.UserName,roleName);//成员加入特定角色中 return RedirectToUserPage( user ); } public virtual ActionResult RemoveuserFromrole( Guid key,String roleName ) { var user = Membership.GetUser(key); Roles.RemoveUserFromRole(user.UserName,roleName);//移除特定角色中的成员 return RedirectToUserPage( user ); } #endregion
Add Index View 只列出须自行编写的表现层code <%} %> 新增Guest角色 删除Guest角色
Details In Controller public ActionResult Details(Guid key) { return View(systemrepository.Detailsusers(key)); } Add Details View 须自行修改Details参数部分 .... ....... ........
Create In Controller public ActionResult Create() { return View(); } // // POST: /System/Create [AcceptVerbs( HttpVerbs.Post )] public ActionResult Create( FormCollection collection ) { try { MembershipCreateStatus status = MembershipCreateStatus.UserRejected; MembershipUser user = null; if( collection[ "Password" ].Equals( collection[ "Confirmpw" ],StringComparison.CurrentCultureIgnoreCase ) ) { user = Membership.CreateUser( collection[ "Username" ],collection[ "Password" ],collection[ "Email" ],null,true,out status ); } if( status == MembershipCreateStatus.Success ) return RedirectToAction( "Index" ); else return RedirectToAction( "Error" ); } catch { return View( "Error" ); } } 编写virtual method for member #region virtual method for member public virtual RedirectToRouteResult UnlockUser( Guid key ) { var user = Membership.GetUser(key); user.UnlockUser();//解除锁定 return RedirectToUserPage( user ); } public virtual ActionResult DeleteUser(Guid key) { var user = Membership.GetUser(key); Membership.DeleteUser(user.UserName,true);//删除成员 return RedirectToAction("Index"); } #endregion Add Create View 新增test123成员 删除test123成员 ?Edit In Controller // GET: /System/Edit/5 public ActionResult Edit(Guid key) { var user = Membership.GetUser(key); ViewData["AllRoles"] = Roles.GetAllRoles().OrderBy(x => x).ToList(); ViewData["UsersRoles"] = Roles.GetRolesForUser(user.UserName).OrderBy(x => x).ToList(); return View(systemrepository.Editusers(key));//指向systemrepository } // // POST: /System/Edit/5 [AcceptVerbs(HttpVerbs.Post)] public ActionResult Edit( Guid key,FormCollection collection ) { try { var user = Membership.GetUser(key); //设定白名单 UpdateModel( user,new[] { "Email","Comment","Isapproved" },collection.ToValueProvider() ); Membership.UpdateUser(user);//更新 return RedirectToUserPage( user ); } catch { return RedirectToAction( "Error" ); } }
编写virtual method for password #region virtual method for password public virtual ViewResult ResetPassword() { String userName = Request.Form["UserName"]; var user = Membership.GetUser(userName); var pwd = user.ResetPassword(null); ViewData["newpw"] = pwd; return View(); } #endregion ?Add Edit View 只列出须自行编写的表现层code 由于controller传给view含有list类型,所以实做IList泛型集合,并循环显示出相关数据。
?编辑test123 重设test123密码(实际应用上勿使用默认加密算法) Add ResetPassword View
将test123加入 Normal角色中 这样就完成了成员和角色管理功能了。
贺!一百篇达成 自己从去年8月加入点博客后,借由写博客文章提升自己,也认识了很多同好 收获说真的还不少,期望自己在往后的日子能继续持续下去,最后,先预祝大家虎年行大运。 原文:大专栏 ?[C#][ASP.NET MVC]实做成员和角色管理 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |