[Practice Note] 2. Authorize特性中Roles,User权限控制实现

本文介绍了如何在MVC中使用Authorize特性实现Roles和Users的权限控制。首先,在Global.asax.cs中初始化角色和用户;然后,通过OAuth授权服务器提供者实现授权;接着,说明了在Login方法中定义角色的过程;最后,提供了一个测试Controller的示例。适合初学者了解权限控制的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前几天网上搜索了好久的文章,整理下MVC Authorize关于Roles,Users的权限

基于上一篇OAuth四种授权模式的实现

地址:https://mp.youkuaiyun.com/postedit/102814687

1.在API项目的 Global.asax.cs中,初始化构造方法,添加授权请求初始角色,用户方法

		//构造方法
        public WebApiApplication()   
        {
            AuthenticateRequest += WebApiApplication_AuthenticateRequest;
        }
		
		//授权请求初始化角色,用户
        private void WebApiApplication_AuthenticateRequest(object sender, EventArgs e)
        {
            HttpCookie authcookie = Context.Request.Cookies[FormsAuthentication.FormsCookieName];
            if (authcookie == null || authcookie.Value == "")
                return;

            FormsAuthenticationTicket authticket = null;
            try
            {
                authticket = FormsAuthentication.Decrypt(authcookie.Value);
            }
            catch (Exception)
            {
                return;
            }
            /*
            Authorize(Users="A,B,C")
            该用户校验,基于token生成的Identity的Name匹配,
            例:var identity = new ClaimsIdentity(new GenericIdentity(context.ClientId,context.Options.AuthenticationType));

            Authorize(Roles="A,B,C")
            角色校验基于登陆时写入的UserData
            */
            //Authorize(Roles="111,2222")
            string[] roles = authticket.UserData.Split(new char[] { ',' });
            if (Context.User != null)
            //identity中存放的是users信息,roles是对应的roles信息
                Context.User = new System.Security.Principal.GenericPrincipal(Context.User.Identity, roles);
        }


上面的方法步骤完成后就可以实现角色用户权限校验,接下来配置请求的角色,用户

2.在上一篇中讲到了MyOAuthAuthorizationServeProvider基于OAuthAuthorizationServerProvider的实现,参照密码模式段代码
在这里插入图片描述
图中标记的就是用户身份Name,对应授权特性中的Users。

角色的定义一般可以在登陆时赋予,这里我们在自己的控制器中写一个Login方法,用于定义角色。

 		[AllowAnonymous]
        public JsonResult Login()
        {
            #region 
            //admin参数对应管理员权限,多个权限可以"A,B,C,D"
            FormsAuthenticationTicket authticket = new FormsAuthenticationTicket(
                1, "ticket1", DateTime.Now, DateTime.Now.AddMinutes(20), false, "admin"
                );
            string encryredticket = FormsAuthentication.Encrypt(authticket);
            HttpCookie authcookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryredticket);
            //将信息写入到请求的cookie中
            HttpContext.Response.Cookies.Add(authcookie);
            #endregion

            return JsonOK("登陆成功");
        }

3.写一个测试Controller

	public class MyController:Controller
    {
        public JsonResult JsonOK(object o)
        {
            return Json(JsonConvert.SerializeObject(o), JsonRequestBehavior.AllowGet);
        }
    }


	public class RoleController : MyController
    {
        // GET: Role
        public JsonResult Index()
        {
            return JsonOK("No Role,No User");
        }


        [Authorize(Roles ="admin",Users ="Alis")]
        public JsonResult Role1()
        {
            return JsonOK("Role-admin;user-alis");
        }

        [Authorize(Roles ="admin")]
        public JsonResult Role2()
        {
            return JsonOK("role-admin");
        }

        [Authorize(Roles = "admin,source")]
        public JsonResult Role3()
        {
            return JsonOK("role-admin,source");
        }

        [Authorize(Users ="C1,Alis")]
        public JsonResult RoleClient2()
        {
            return JsonOK("RoleClient2");
        }
    }

因为也是刚刚学习这块,有理解不对的地方希望大家多多指教!!相互学习

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值