天天看点

Java权限管理分析(一)Java权限管理分析(一)

Java权限管理分析(一)

目录

  • Java权限管理分析(一)
    • 1. 权限管理原理
      • 1.1 概述
      • 1.2 名词解释
      • 1.3 用户认证
        • 1.3.1 概述
        • 1.3.2 认证流程
        • 1.3.3 关键对象
      • 1.4 用户授权
        • 1.4.1 概述
        • 1.4.2 授权流程
        • 1.4.3 关键对象
        • 1.4.4 总结
    • 2. 设计思路
      • 2.1 说明
      • 2.2 模型设计
      • 2.3 数据库设计
      • 2.4 分配权限
    • 3. 总结

1. 权限管理原理

1.1 概述

目前大多数应用的系统都需要权限管理,来实现对用户访问资源的控制,按照一定的规则或策略来控制用户访问且只可以访问拥有权限的资源。好比公司里产品开发、市场、运维、测试等职位,大家负责自己的业务,相互独立,也相互联系、协作,共同完成任务。

权限管理包括授权和认证两部分。

1.2 名词解释

用户/账号(User) :系统给每个使用者分配的账号,这个账号就像一把key,使用者可以通过这个账号来进行对系统资源的访问和操作,系统则通过这个账号来识别不同的使用者,分配对应的资源权限。

角色(Role):是统一权限的集合,是众多权限颗粒的组成,权限的载体,好比一串钥匙。通常会把具体权限赋予给到角色,用户担任该角色,从而实现权限的分配管理,所以它承担了桥梁的作用。

例如:系统管理员、运维员、普通用户。

权限(Permission):包括页面、操作、数据等方面。是对系统中的某个功能或资源读取或操作的权利,真正达到对系统数据安全的保护。

1.3 用户认证

1.3.1 概述

简单来说,就是用户在进行身份验证的时候,提供其身份信息和凭证,系统验证用户的合法性,通过验证后才可以正常访问系统。

常见的验证方法:

  • 用户名&密码
  • 指纹打卡机
  • 证书验证

1.3.2 认证流程

Java权限管理分析(一)Java权限管理分析(一)

1.3.3 关键对象

  • subject:主体,理解为用户,可能是程序,都要去访问系统的资源,系统需要对subject进行身份认证。
  • principal:身份信息,通常是唯一的,一个主体还有多个身份信息,但是都有一个主身份信息(primary principal)
  • credential:凭证信息,可以是密码 、证书、指纹。

1.4 用户授权

1.4.1 概述

简单理解为访问控制,在用户认证通过后,系统对用户访问资源进行控制,用户具有资源的访问权限方可访问。

1.4.2 授权流程

Java权限管理分析(一)Java权限管理分析(一)

1.4.3 关键对象

授权过程可用理解为:WHO对WHAT(WHICH)进行HOW操作

  • who:指主体(subject)在通过认证后系统对其进行访问控制。
  • what(which):资源(resource),权限所控制的东西就叫资源。比如:添加博客,博客列表页面,博客信息

    资源分为资源类型和资源实例

    用户信息就是资源类型,相当于java类

    id为001的用户就是资源实例,相当于new出来的java对象

1.4.4 总结

用户认证就是通过用户的身份信息或凭证信息来验证其身份,验证(登录)通过后,就到授权了,系统根据该用户的角色来判断其权限,提供其可用的资源。

2. 设计思路

2.1 说明

一个用户可以拥有多个权限,同时一个权限也可以赋予多个用户,那么用户和权限就是多对多的关系,需要角色来维护和链接用户和权限之间的关系。通过用户关联角色,角色关联权限,从而达到用户和权限的一个间接关联关系。而用户和角色,角色和权限也是多对多的全系,从而也需要引入用户角色和角色权限两张中间表来实现。

2.2 模型设计

​ (1) 每一个用户包含的属性有用户ID,用户名称,密码,用户状态等基本属性。

​ (2) 每一个角色包含的属性有角色ID,角色名称,状态等基本属性。

​ (3) 每一个权限包含的属性有权限ID,权限名称,URL,权限编码,父级ID,权限类型,状态等基本属性。

Java权限管理分析(一)Java权限管理分析(一)

2.3 数据库设计

通用权限管理的数据库设计一般都是五张表,三张主表,两张关系表。

  • 用户表:保存用户的基本信息(用户id、用户名、密码、状态、。。。)
  • 用户角色关系表:保存用户和角色的关系(用户id、角色id、。。。)
  • 角色表:保存角色的基本信息(角色id、名称、标识、状态、。。。)
  • 角色权限关系表:保存角色和权限的关系(角色id、权限id、。。。)
  • 权限表:保存权限具体可操作的内容(权限id、链接url、类型、标识、。。。)
Java权限管理分析(一)Java权限管理分析(一)

上图仅为个人项目的模型设计,在企业开发中可以根据自身系统特点进行修改,实现更加合适,完整的权限管理体系。

2.4 分配权限

一般权限的分配都是管理员来进行操作,先分析该角色会具有哪些权限,然后将权限赋予给角色,让指定用户来担任该角色。

通常用户分配到的权限信息都需要持久化保存在数据库中。

3. 总结

对于大多数管理系统来说,都需要对用户进行权限管理,来保证系统数据的安全。对角色和权限自由配置,权限颗粒度细化,配置简单明了,这才是普遍需要,能够接受的优秀的解决方案。

本文提供的仅为通用设计,网上也有许多前辈总结出来的优秀解决方案,后续Max会整理出来于大家分享,希望大家能够关注Max,一起学习交流。

以上哪里写的不对或需要改进,欢迎大家提出,谢谢啦!