Skip to main content

IAM权限系统设计方案

IAM(Identity and Access Management,身份与访问管理)是指对系统中的用户身份进行认证(Authentication)和授权(Authorization)的管理体系。本系统基于IAM理念,提供统一的权限管理能力。

一、表关系图

1.1 主体关联关系

iam_user (用户)

├── ia m_user_role ── iam_role (角色)
│ (用户-角色关联)

└── iam_user_org ── iam_org (组织)
(用户-组织关联)

└── iam_org (下级组织 - 自关联)

1.2 资源关联关系

iam_menu (菜单)

├── iam_menu (子菜单 - 自关联)

└── iam_button (按钮)

1.3 权限关联关系

iam_permission (权限⭐) ── 主体

├── USER ── iam_user

├── ROLE ── iam_role

└── ORG ── iam_org

iam_permission (权限⭐) ── 资源

├── MENU ── iam_menu

└── BUTTON ── iam_button

1.4 关系说明表

表名关联表关联字段关系说明
iam_user_roleiam_useruser_id用户拥有多个角色
iam_user_roleiam_rolerole_id角色被分配给多个用户
iam_user_orgiam_useruser_id用户属于多个组织
iam_user_orgiam_orgorg_id组织包含多个用户
iam_orgiam_orgparent_id组织层级关系(自关联)
iam_menuiam_menuparent_id菜单层级关系(自关联)
iam_buttoniam_menumenu_id按钮属于某个菜单
iam_permissioniam_usersubject_id + subject_type='USER'用户授权
iam_permissioniam_rolesubject_id + subject_type='ROLE'角色授权
iam_permissioniam_orgsubject_id + subject_type='ORG'组织授权
iam_permissioniam_menuresource_id + resource_type='MENU'菜单权限
iam_permissioniam_buttonresource_id + resource_type='BUTTON'按钮权限

二、方案概述

本权限系统采用统一权限模型(Unified Permission Model),核心特点:

特性说明
多主体授权支持用户(User)、角色(Role)、组织(Org)三种维度独立授权
资源分离菜单和按钮为独立表结构,便于分别管理
灵活授权支持授权(Allow)和拒绝(Deny)两种效果
自定义范围权限范围字段为字符串,用户可自定义(默认ALL)
动态扩展新增资源类型无需修改权限表结构

授权优先级:用户授权 > 角色授权 > 组织授权,Deny(拒绝) > Allow(授权)

三、表结构定义

3.1 用户表 (iam_user)

字段名类型说明
idBIGINT主键,自增
usernameVARCHAR(50)用户名,唯一
passwordVARCHAR(100)密码
nicknameVARCHAR(50)昵称
avatarVARCHAR(500)头像URL
emailVARCHAR(50)邮箱
phoneVARCHAR(50)手机号
statusTINYINT状态:0禁用 1启用
create_timeTIMESTAMP创建时间
update_timeTIMESTAMP更新时间

3.2 角色表 (iam_role)

字段名类型说明
idBIGINT主键,自增
codeVARCHAR(50)角色编码,唯一
nameVARCHAR(50)角色名称
descriptionVARCHAR(200)描述
statusTINYINT状态:0禁用 1启用
create_timeTIMESTAMP创建时间
update_timeTIMESTAMP更新时间

3.3 组织表 (iam_org)

字段名类型说明
idBIGINT主键,自增
parent_idBIGINT父组织ID,0为根节点
codeVARCHAR(50)组织编码,唯一
nameVARCHAR(100)组织名称
typeTINYINT类型:1公司 2部门 3小组
pathVARCHAR(500)层级路径,如:id1-id2-id3
sortINT排序,越大越靠前
statusTINYINT状态:0禁用 1启用
create_timeTIMESTAMP创建时间
update_timeTIMESTAMP更新时间

3.4 用户-角色关联表 (iam_user_role)

字段名类型说明
idBIGINT主键,自增
user_idBIGINT用户ID
role_idBIGINT角色ID
create_timeTIMESTAMP创建时间
update_timeTIMESTAMP更新时间

3.5 用户-组织关联表 (iam_user_org)

字段名类型说明
idBIGINT主键,自增
user_idBIGINT用户ID
org_idBIGINT组织ID
is_priamryTINYINT是否主组织:0否 1是
create_timeTIMESTAMP创建时间

3.6 菜单表 (iam_menu) ⭐ 资源表1

字段名类型说明
idBIGINT主键,自增
parent_idBIGINT父菜单ID,0为根节点
codeVARCHAR(100)菜单编码,唯一
nameVARCHAR(100)菜单名称
pathVARCHAR(200)路由路径
iconVARCHAR(50)图标
componentVARCHAR(200)前端组件路径
typeVARCHAR(100)类型:菜单组、菜单、外链
sortINT排序号
statusTINYINT状态:0禁用 1启用
c re a te Ti meTIMESTAMP创建时间
update_timeTIMESTAMP更新时间

3.7 按钮表 (iam_button) ⭐ 资源表2

字段名类型说明
idBIGINT主键,自增
menu_idBIGINT所属菜单ID
codeVARCHAR(100)按钮编码,唯一
nameVARCHAR(100)按钮名称
typeVARCHAR(20)按钮类型:add/edit/delete/export等
sortINT排序号
statusTINYINT状态:0禁用 1启用
create_timeTIMESTAMP创建时间
update_timeTIMESTAMP更新时间

3.8 权限表 (iam_permission) ⭐ 核心表

字段名类型说明
idBIGINT主键,自增
subject_typeVARCHAR(20)主体类型:USER/ROLE/ORG
subject_idBIGINT主体ID
resource_typeVARCHAR(20)资源类型:MENU/BUTTON
resource_idBIGINT资源ID
effectVARCHAR(100)效果:Allow(授权)或 Deny(拒绝),默认Allow
scopeVARCHAR(100)权限范围,用户自定义字符串,默认ALL
create_timeTIMESTAMP创建时间
update_timeTIMESTAMP更新时间

唯一约束:(subject_type, subject_id, resource_type, resource_id)

四、字段详细说明

4.1 effect(授权效果)

含义优先级
Allow授权
Deny拒绝

规则:同一资源同时存在Allow和Deny时,Deny优先

4.2 scope(权限范围)

示例值含义说明
ALL全部默认,无限制

scope字段为字符串,业务系统可根据需求自定义格式和解析逻辑