前言
最新写的都是mall项目的改造,基本上对目前开源的两个mall项目做了简单的总结和介绍,相信在之前有一定的开发基础知识,对我之前的文章可以很好的入门。
后面的一些文章我就开始针对业务来进行讲解,一天一篇博文估计是没办法实现了,今天我们要说的是权限系统。
下面这张图就是我们常见的权限系统,用户,角色,角色权限 来构成我们最基本的权限系统。
为什么要有权限系统?
在我们平时玩抖音,头条,或者登陆学校的考试信息网,都是需要手机号或者账号密码的登录,通过账号密码来保证你可以登录你所上的网站。
那我们在具体介绍权限系统之前,先说一说如果没有权限系统会发生什么?
1、私密性
不管是toB的系统,还是toC的系统,首先都要保证我们自己的东西,自己想给谁看给谁看,不能像浏览网页一样谁都可以看。
比方,上学考试,考完试出成绩,成绩通过站内信的方式告诉你考了多少分,这分数你不想让别人知道。但是如果没有权限系统所有人就都知道你的成绩了。
2、安全性
平时我们左右的app或者网站,基本都支持微信/支付宝登录或手机号登录的方式。那大家有没有想过,为什么有的app是支持微信登录,有些是不支持微信登录的。
这是为了保证个人信息的安全,一般接入微信或者其他第三方登录的方式,都是需要对你的app进行审核并且认证的,只有认证后的app才可以使用微信登录的方式,保证了你微信信息的安全。
3、便捷性
如果没有权限系统,就相当于每个人都没有标签,大家都是一样。有了权限系统,计算机就会知道,你是管理员,你可以进入后台管理,你是游客,你只能进行简单的浏览。
认证系统细分
从业务角度来说:
分为:
1、后台登录登出(用户拥有什么权限)
2、第三方登录(用户是否可以通过微信直接登录到我们的系统)
从技术的角度来说:
分为:
1、后台接口控制(api是否可以访问)
2、前端页面控制 (这个网页你是否可以打开)
3、第三方接口登录(俗称sso,单点登录)
4、oauth2认证授权 (认证:你可以访问那些服务,授权:这些服务里你分别是什么角色,可以做那些操作)
5、移动端和pc的区分(这里主要是说的cookie,移动端不存在cookie)
mall 采用了什么方式的权限
通过文档的介绍,mall没有使用sso单点登录的方式。目前采用的是我们 1 前端页面控制的方式,下面是mall用户相关的表结构图。
其中涉及到权限的litemall_admin(管理员表),litemall_user(用户表),litemall_role(角色表),litemall_ permission(权限表)
admin后台管理用到的表,比较简单的用户-->角色-->权限
移动端权限用到的表(用户数据,和微信的用户数据,并没有权限)
1、微信商场与小程序移动端
之前我说到了,移动端是没有cookie的,litemall的代码也很好的验证了。在移动端的登录这里,操作是更细登录时间后,直接返回token的方式。
微信方式小程序登录,这里可以看到,用户微信授权登录,服务端去微信获取用户信息,如果存在新增,然后返回token。
admin后台管理的登录,这里的后台管理和微信方式方式完全不通。
1、商城移动端,因为没有cookie,采用的是账号密码验证,通过jwt来生成token
2、admin后台,使用的shiro来做权限控制,token是shiro的sessionId。
说完登录,然后是权限控制
移动端目前只是做了token的验证,请求带token的才可以访问接口。简单来说,就是带token用户可以访问移动端的所有接口。
admin后台,采用shiro权限工具来做权限,没有角色只能访问指定的接口,不可以访问所有接口。
移动端权限
admin后台管理
总结
市场上权限控制其实很复杂,可以说一个初中级程序员一个公司是不会让他来做权限系统的,因为从网上找到的权限系统,在真身的生产中是很致命的。
但是litemall的权限系统可以作为我们学习权限系统很好的入门项目,admin后台使用shiro权限控制,shiro的学习成本很低可以快速入门。移动端采用自定义token的方式来进行登录,解决移动端没有cookie的问题。
这里只有比较基础的后端api权限,前端控制,sso等都没有提及到,学习技术我们就像爬山,当你达到山顶,你才会发现后面还有更高的山峰,才会觉得自己很渺小。
我是程序员架构师13
喜欢点下关注,你的关注是我写作的最大支持