今天跟大家唠唠我搞的这个“莱纳·布朗”项目,别误会,不是cosplay,是代码!
事情是这样的,最近公司要做一个用户权限管理系统,这玩意儿听起来简单,做起来真要命。各种角色、权限、认证、授权,绕来绕去,脑子都大了。我就寻思着,能不能搞一个模型出来,把这些东西都抽象一下,方便以后维护和扩展。
然后我就想到了《进击的巨人》里的莱纳·布朗,这哥们儿身份复杂,亦正亦邪,一会儿是忠诚的战士,一会儿又是敌方的间谍,完美符合我这个权限系统的需求!所以我就决定,用“莱纳·布朗”来命名这个项目,也算是致敬一下。
我开始搭架子。用的是Spring Security,这玩意儿是Java界的权限管理标配,用起来还算顺手。然后,定义了几个核心的类:
User: 用户,不用说,就是系统的使用者。
Role: 角色,比如管理员、普通用户、游客等等。
Permission: 权限,比如读取数据、修改数据、删除数据等等。
Authentication: 认证,就是验证用户身份的过程,比如用户名密码登录、第三方登录等等。
Authorization: 授权,就是判断用户是否有权限访问某个资源的过程。
这些类都比较简单,就是一些属性和方法,关键是怎么把它们联系起来。我就想,莱纳·布朗最大的特点是什么?是他的双重身份!所以我就借鉴了他的这个特点,给每个用户都设置了多个角色,每个角色又对应多个权限。
这样一来,一个用户就可以同时拥有多个身份,每个身份又可以访问不同的资源。比如,一个用户可以是管理员,同时又是普通用户,管理员可以修改数据,普通用户只能读取数据。是不是有点像莱纳·布朗了?
这只是第一步。我还要实现认证和授权的逻辑。认证比较简单,就是验证用户的用户名和密码是否正确。授权就比较复杂了,要判断用户是否拥有访问某个资源的权限。
我用的是基于角色的访问控制(RBAC),就是判断用户是否拥有某个角色,如果拥有,就允许访问。也可以用基于权限的访问控制(PBAC),就是直接判断用户是否拥有某个权限。
RBAC的优点是简单易懂,易于维护,PBAC的优点是灵活,可以实现更细粒度的权限控制。- 我这里选择了RBAC,因为我的需求比较简单,RBAC已经足够了。
我写了一些测试用例,验证了我的模型的正确性。测试结果还不错,基本满足了我的需求。
这个“莱纳·布朗”项目,就是一个用户权限管理系统的模型。我借鉴了莱纳·布朗的双重身份,给用户设置了多个角色,每个角色又对应多个权限。实现了基于角色的访问控制,可以灵活地控制用户的访问权限。
这个项目还有很多不足之处,比如:
没有实现动态权限管理,权限都是写死在代码里的。
没有实现细粒度的权限控制,只能控制到角色级别。
没有实现完善的日志记录,无法追踪用户的操作。
不过作为一个实验性的项目,已经足够了。以后有时间,我会继续完善它,让它变得更加强大。
希望我的这个实践记录,能给大家带来一些启发。如果你也有类似的需求,不妨试试这个“莱纳·布朗”模型,说不定会有意想不到的效果。
还没有评论,来说两句吧...