mvc5权限管理(简单登录):ActionFilterAttribute

效果图:

1.控制器

 public ActionResult Index()
        {
            return View();
        }
        [HttpPost]
        public ActionResult Index(User user)
        {
            if( LoginBLL.CheckLogin(ref user)) { 
                MyCookie.Write(user);
            return Content("loging is ok <a href='/jq/List'>查看</a>");
            }
            else
            {
                
                return Content("login is error:");
            }
        }

        public ActionResult List() {
            User user = MyCookie.ReadCurCookie();
            string con =  "card = " + user.card + " pwd = " + user.pwd + " lv =" + user.lv +"<p/>" ;
            con += "<a href='write'>写</a><p/>";
            con += "<a href='read'>读</a><p/>";
            return Content(con);
        }

        [MyValidate(PowType = 1)] //权限管理 权限为1
        public ActionResult read() {
            return Content("you can read");
        }
        [MyValidate(PowType = 2)] //权限管理 权限为2
        public ActionResult write() {
            return Content("you can write");
        }

        public ActionResult error()
        {
            return Content("权限不够哦");
        }
View Code

这个里面的模型类是:

    public class User
    {
        public string card { get; set; }
        public string pwd { get; set; }
        public int lv { get; set; }
    }
View Code

  

2.封装类 

  设置权限验证的类:

    public class MyValidate : ActionFilterAttribute
    {
        public string Power;
        public int PowType;
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            try
            {
                // user is cooke infor
                User mod = MyCookie.ReadCurCookie();
                // check login status
                if (!LoginBLL.CheckLogin(ref mod))
                {
                    filterContext.Result = new RedirectResult("/JQ/index");
                }
                // Pow type is control on [MyValidate(PowType = ?)] set values             
                if ( mod.lv != PowType)
                {
                    filterContext.Result = new RedirectResult("/jq/error");
                    //this return route(
                    //new RedirectToRouteResult("Default", new RouteValueDictionary(new { controller = "Home", action = "Default" }));
                }
            }
            catch
            {
                filterContext.Result = new RedirectResult("/JQ/Login");
            }
        }

        //当方法执行完毕
        public override void OnActionExecuted(ActionExecutedContext filterContext)
        {
            base.OnActionExecuted(filterContext);
        }
    }
View Code 

  读写cookie

        public class MyCookie
        {
            public static void Write(User user)
            {
                FormsAuthentication.SetAuthCookie(user.card, true, FormsAuthentication.FormsCookiePath);
                //把用户对象保存在票据里
                FormsAuthenticationTicket Ticket = new FormsAuthenticationTicket(1, user.card, DateTime.Now, DateTime.Now.AddTicks(FormsAuthentication.Timeout.Ticks), false, MyJosnHelper.ToJson(user));
            //MyJosnHelper.ToJson(user) 存储在票据的 UserData 处,这个地方怎么操作由你决定
            //加密票据
            string hashTicket = FormsAuthentication.Encrypt(Ticket);
                HttpCookie userCookie = new HttpCookie(FormsAuthentication.FormsCookieName, hashTicket);
                System.Web.HttpContext.Current.Response.Cookies.Add(userCookie);
            }

            public static User ReadCurCookie()
            {
                try
                {
                    var cookie = System.Web.HttpContext.Current.Request.Cookies[FormsAuthentication.FormsCookieName]; //的到Cookie
                    if (cookie == null)
                        return null;
                    var ticket = FormsAuthentication.Decrypt(cookie.Value); //解密票据
                    string str = ticket.UserData; 
                    return MyJosnHelper.JsonDeserialize<User>(str);
                }
                catch
                {
                    return null;
                }
            }

            public static void ReMoveCookie()
            {
                FormsAuthentication.SignOut();
            }
        }
View Code

  模型json互转

    public class MyJosnHelper
    {
        public static T JsonDeserialize<T>(string jsonString) 
        {
            return JsonConvert.DeserializeObject<T>(jsonString);
        }

        public static string ToJson(object obj)
        {
            JsonSerializerSettings settings = new JsonSerializerSettings();
            settings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
            return JsonConvert.SerializeObject(obj);
        }

    }
View Code

 

2016.5.12  使用部分视图显示登陆效果 

@using Microsoft.AspNet.Identity
@using ssm.Models
@using SSM.comm

@if ( MyCookie.Read() != null )
{
    <ul class="nav navbar-nav navbar-right">
        <li>
            @Html.ActionLink("你好," +  MyCookie.Read().Adm_Name + "!", "Infor", "grzx", routeValues: null, htmlAttributes: new { title = "Manage" })
        </li>
        <li><a href="/home/out">注销</a></li>
    </ul>
}
else
{
    <ul class="nav navbar-nav navbar-right">
        <li>@Html.ActionLink("登录", "Login", "Home", routeValues: null, htmlAttributes: new { id = "loginLink" })</li>
    </ul>
}
View Code

 

 

扩展文档:

http://www.cnblogs.com/zxjyuan/archive/2009/08/21/1551196.html   FormsAuthenticationTicket对象

代码包:效果在控制器 jq里面

http://pan.baidu.com/s/1kUx7I31

 

转载于:https://www.cnblogs.com/0to9/p/5291213.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
功能介绍: 本系统通过对MVC4 Simplemembership默认数据库进行扩展实现了后台管理用户,角色和权限。通过角色的权限配置实现对前台Controller和Action权限管理。 使用方法: 第一步:修改Web.config文件。 这个文件中只需要TYStudioUsersConnectionString中的用户名和密码,修改为你本地具有创建数据库的权限的用户名和密码。修改完成运行程序会系统会自动创建扩展后的Membership数据库。 第二步:建立系统管理员角色和用户。 考虑到手动添加系统管理员角色和用户比较麻烦,初始的程序都是可以匿名访问的,这时候你需要运行系统添加一个系统管理员角色,并添加一个用户赋给系统管理员权限。再添加完系统管理员角色和用户之后你需要修改一下Controllers下面的各个Controller,注释掉[AllowAnonymous]并把//[Authorize(Roles = "系统管理员")]注释打开。编译重新运行程序,这时后台管理系统只能允许系统管理员角色的用户登陆了。 第三步:测试产品模块(ProductController) Controller下有一个ProductController是用来测试我们的权限管理是否成功的起作用了,同时也是对前台Controller和Action进行全线控制的方法。这里使用[TYStudioAuthorize("查询产品")]方式对Action进行访问控制。所有关于Membership的类都在Models/Membership文件夹下面。将来你需要把这些class移植到你的公共project中去,这样就可以使用MVC4 Simplemembership对你的前台进行权限控制了。 注意: 开发环境为Visual Studio 2012
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值