HTML5技术

权限管理学习 一、ASP.NET Forms身份认证 - 农码一生(2)

字号+ 作者:H5之家 来源:H5之家 2017-08-01 11:02 我要评论( )

前端代码: @{MyFormsPrincipalUserInfo user = Context.User as MyFormsPrincipalUserInfo;if (user == null){form action=/home/login3input type=text name=userName /input type=submit value=登录 //form}else

前端代码:

@{ MyFormsPrincipal<UserInfo> user = Context.User as MyFormsPrincipal<UserInfo>; if (user == null) { <form action="/home/login3"> <input type="text" name="userName" /> <input type="submit" value="登录" /> </form> } else { <form action="/home/logout2"> <div>当前用户已登录,登录名:@Context.User.Identity.Name</div> <div>当前用户已登录,登录时间:@user.UserData.LoginTime</div> <input type="submit" value="退出" /> </form> } }

其实整个过程和FormsAuthentication.SetAuthCookie(userName, true); //登录是等效的。只是我们通过扩展,存了我们想要存储的数据。
过程也比较简单:

这里稍微复杂点的地方就是解密然后给User赋值HttpContext.Current.User = new MyFormsPrincipal<UserInfo>(ticket, userData);。
MyFormsPrincipal需要实现接口MyFormsPrincipal

public class MyFormsPrincipal<TUserData> : IPrincipal where TUserData : class, new() { private IIdentity _identity; private TUserData _userData; public MyFormsPrincipal(FormsAuthenticationTicket ticket, TUserData userData) { if (ticket == null) throw new ArgumentNullException("ticket"); if (userData == null) throw new ArgumentNullException("userData"); _identity = new FormsIdentity(ticket); _userData = userData; } public TUserData UserData { get { return _userData; } } public IIdentity Identity { get { return _identity; } } public bool IsInRole(string role)//这里暂时不实现 { return false; } }

倒也没有什么特别,就是实例化的时候传入票据和自定义数据就好了。

授权

有了登录一般都离不开授权。微软的东西好就好在,一般都是成套成套的。

[Authorize] public ActionResult LoginOk() { return View(); }

直接给Action添加一个Authorize特性就好了,这人就会自动检查是否登录。如果没有登录自动跳转到登录页面。登录页面的设置还是在web.config里面

<system.web> <authentication mode="Forms" > <forms loginUrl="/home/index"></forms>

这种简单的授权验证明显是不够的。很多时候某些页面只有某些人才能访问。比如VIP。那么我们又要扩展了。

//继承 AuthorizeAttribute public class MyAuthorizeAttribute : AuthorizeAttribute { public override void OnAuthorization(AuthorizationContext filterContext) { if (filterContext.HttpContext.User.Identity.Name != "农码一生") { filterContext.HttpContext.Response.Write("您不是vip用户,不能访问机密数据"); filterContext.HttpContext.Response.End(); return; } base.OnAuthorization(filterContext); } } [MyAuthorize] public ActionResult LoginVIP() { return View(); }

是的,就是这么简单。说了这么多,来张效果图吧:

推荐阅读:


  • Demo:
  • https://github.com/zhaopeiym/BlogDemoCode/tree/master/权限管理/1-Forms身份认证
  • posted @

     

    1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

    相关文章
    • canvas学习总结六:绘制矩形 - beevesnoodles

      canvas学习总结六:绘制矩形 - beevesnoodles

      2017-08-01 08:00

    • HTML5学习--SVG全攻略(基础篇) - 狙击手+

      HTML5学习--SVG全攻略(基础篇) - 狙击手+

      2017-07-29 16:04

    • 【canvas学习笔记一】基本认识 - 池月

      【canvas学习笔记一】基本认识 - 池月

      2017-07-26 15:02

    • HTML 基础学习笔记 - gdwkong

      HTML 基础学习笔记 - gdwkong

      2017-07-23 09:01

    网友点评
    i