今天跟大家伙儿唠唠我搞的这个“列土封疆”的小项目,说白,就是自己搭一套权限管理系统,模拟古代帝王分封诸侯那意思,让不同的人管不同的地儿,干不同的事儿。
我寻思这玩意儿挺简单,不就是个权限分配嘛增删改查那一套。上手就用Spring Boot搭个架子,啪啪啪一顿敲,用户、角色、权限,三个表建起来,再写几个接口,完事儿!
结果,真跑起来才发现,事情没那么简单。就拿用户来说,不同部门的人,权限不一样,同一个部门,不同级别的人,权限也不一样。这要是都写死在代码里,那以后还不得改死?
于是我开始琢磨,怎么才能把权限这玩意儿搞得灵活一点。先是研究RBAC(Role-Based Access Control),觉得这玩意儿挺把用户和权限通过角色关联起来,这样就不用给每个用户都单独分配权限。
但是,RBAC也有个问题,就是角色这玩意儿,还是得提前定义不够灵活。万一哪天业务变,角色也要跟着变,还是得改代码。
后来我又研究ABAC(Attribute-Based Access Control),这玩意儿更牛逼,直接基于属性来判断权限,比如用户属性、资源属性、环境属性等等。这样,只要属性定义好,权限就可以动态变化,不用改代码。
但是,ABAC也有个缺点,就是太复杂,配置起来太麻烦。而且性能也是个问题,每次都要判断一大堆属性,效率肯定不高。
琢磨半天,我决定把RBAC和ABAC结合起来,搞一个混合模式。先用RBAC定义一些基本的角色,比如管理员、普通用户等等。然后,再用ABAC来控制一些细粒度的权限,比如某个用户只能访问某个部门的数据等等。
这样,既保证灵活性,又避免过于复杂。
就是具体的实现。我先是定义一套权限模型,包括用户、角色、权限、资源、属性等等。然后,写一堆代码,实现权限的分配、判断、管理等等。
这中间,遇到不少坑。比如,权限判断的时候,怎么才能快速找到用户拥有的权限?我用的是Guava Cache,把用户的权限缓存起来,这样就不用每次都查数据库。
还有,怎么才能保证权限的安全性?我用的是JWT(JSON Web Token),把用户的身份信息加密后放在Token里,每次请求都带上Token,这样就可以验证用户的身份。
经过几个月的折腾,终于把这套“列土封疆”系统搞出来。公司不同部门的人,只能访问自己负责的数据,干自己该干的事儿,感觉整个公司都井井有条。
虽然这套系统还有很多不完善的地方,比如界面不够美观、性能还有待优化等等。但是,总算是迈出第一步,以后慢慢改进。
搞这套“列土封疆”系统,最大的收获就是让我对权限管理有更深入的理解。以前只是觉得权限就是简单的增删改查,现在才知道,权限管理是一门很深的学问。
而且通过这个项目,我也学到很多新的技术,比如Spring Boot、RBAC、ABAC、JWT、Guava Cache等等。这些技术,以后肯定能派上用场。
我想说的是,技术这玩意儿,就是要多实践,多踩坑,才能真正掌握。光看书、看视频,是永远学不会的。
希望我的分享能对你有所帮助,谢谢大家!
还没有评论,来说两句吧...