权限控制
看源码的小伙伴已经注意到了权限部分,在项目介绍中我说到:“专为API设计的权限”!那么
ApiAdmin
的权限有什么特殊?权限管理作为管理后台中一块重要基石,ApiAdmin
又是如何兼顾效率和多元化配置的呢?
知识准备
在阅读本文之前,需要大家具备一定的计算机基础知识,当然现学现卖也可以哦!
- 二级制
- 二进制和十进制互相转换
- 位运算
- PHP基础
前言
后台管理系统做了好些个了,随着技术的发展,管理后台开发不在局限于web
页面,管理后台也不在仅仅只是管理网站了。我们希望能在微信企业号上登陆我们的管理系统,我们也希望一个管理系统能够管理PC端网站的同时还要管理触屏端网站,管理APP端。所以迫切的需要将传统的管理系统的页面和后台解耦,API
成为一个很不错的选择!RESTFul
架构应运而生,同一个URL
请求由于METHOD
的不一样,导致了它们的作用不一样,传统的基于URL
的认证方式(AUTH
认证,RBAC
认证...)显得力不从心。ApiAdmin
针对这样的需求重新设计了一套正对API的权限认证方式,我们称它为Permission权限认证
。
设计思路
对于权限而言,说白了就是Yes OR No
,而我们的二进制就是1 OR 0
,是不是天然就适配的权限的需求?计算机在处理二进制的时候是没有任何性能压力的(我觉得那天系统优化到二进制层面,我感觉就是极限优化了),那么使用频率很高的权限系统为什么不用二进制来设计呢?
基础原理
为了方便大家理解,我们这里约定一个字节是8个二进制位(其实我们只用到了4个二进制位),同时我们约定每个二进制位的具体含义(0000[前四位只是补位] 0[GET]0[PUT]0[POST]0[DEL])。如果一个用户的权限为十进制8(00001000)那么将其与8(00001000)做逻辑与运算那么结果就是8(00001000)大于0为真,表示当前用户有GET权限。同样的我们将十进制8(00001000)与4(00000100)做逻辑与运算,结果是0(00000000)为假,表示当前用户不具备PUT权限。说道这里,权限的判断就出来了!是不是很容易呢?
当然如果一个用户同时属于两个组,这两个组的权限分别为8(00001000)和4(00000100),那么这个用户的权限就是8(00001000)和4(00000100)做逻辑或运算12(00001100),这时候我们分别用12(00001100)和8(00001000)、12(00001100)和4(00000100)做逻辑与运算,我们发现结果分别为8(00001000)和4(00000100),都大于0为真,表示当前用户拥有GET和PUT权限。
最后说两句
反正我是看懂了,但是确实有点绕,多看几遍应该能理解!如果对于这样的权限认证方式,您有更好的想法,或者我哪里说的不对,欢迎提出来。
更多建议: