权限控制

2018-01-05 11:36 更新

看源码的小伙伴已经注意到了权限部分,在项目介绍中我说到:“专为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权限。

最后说两句

反正我是看懂了,但是确实有点绕,多看几遍应该能理解!如果对于这样的权限认证方式,您有更好的想法,或者我哪里说的不对,欢迎提出来。

以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号