IAM (Identity and Access Management) 模块负责系统的用户认证、授权以及组织架构管理。
IAM 模块基于 RBAC (Role-Based Access Control) 模型设计,实现了细粒度的权限控制。

RBAC 是一种基于角色的访问控制模型,通过将权限分配给角色,再将角色分配给用户,实现了权限的集中管理和灵活分配。
核心思想:
Tagtag Starter 的 RBAC 模型支持两种类型的权限:
控制用户是否可以访问系统的某个功能或操作,包括:
功能权限的标识格式为:{模块}:{资源}:{操作},例如:
sys:user:view - 查看用户sys:user:add - 新增用户sys:user:update - 更新用户sys:user:delete - 删除用户控制用户可以访问的数据范围,包括:
权限支持继承关系:
代表系统的操作员。
属性:
关联:
代表一组权限的集合。
属性:
功能:
代表系统中的功能资源。
属性:
类型:
标识: 如 sys:user:add,用于后端接口权限校验和前端按钮显示控制。
代表企业的组织层级结构。
属性:
结构: 树形结构,支持无限层级。
用途: 用于构建组织架构树,以及作为数据权限的判定依据。
功能: 用户的增删改查、密码重置、状态变更、角色分配。

实现细节:
功能: 角色的创建与维护、权限分配、数据权限配置。

实现细节:
功能: 可视化管理系统的菜单结构、配置菜单属性、定义按钮权限。

实现细节:
功能: 维护企业的组织架构树。

实现细节:
流程:
@PreAuthorize 检查用户是否拥有该 API 的访问权限实现方式:
@RestController
@RequestMapping("/users")
public class UserController {
@PostMapping
@PreAuthorize("@ss.hasPermission('sys:user:add')")
public Result<Void> addUser(@RequestBody @Validated UserDTO userDTO) {
// 新增用户逻辑
}
@PutMapping
@PreAuthorize("@ss.hasPermission('sys:user:update')")
public Result<Void> updateUser(@RequestBody @Validated UserDTO userDTO) {
// 更新用户逻辑
}
}
权限守卫实现:
@Component("ss")
public class PermissionGuard {
public boolean hasPermission(String permission) {
// 1. 获取当前用户
UserPrincipal user = AuthContext.getCurrentUser();
// 2. 检查用户是否为超级管理员
if (user.isSuperAdmin()) {
return true;
}
// 3. 检查用户是否拥有该权限
return user.getPermissions().contains(permission);
}
}
流程:
实现方式:
// 获取用户菜单
const menuList = await getMenuList();
// 动态生成路由
const routes = generateRoutes(menuList);
// 添加到路由表
routes.forEach(route => router.addRoute(route));
使用 v-auth 指令控制按钮显示:
<template>
<button v-auth="'sys:user:add'">新增用户</button>
<button v-auth="'sys:user:delete'">删除用户</button>
</template>
或者使用 AccessControl 组件:
<template>
<AccessControl :access="'sys:user:add'">
<button>新增用户</button>
</AccessControl>
</template>
权限指令实现:
export const AuthDirective = {
mounted(el: HTMLElement, binding: DirectiveBinding) {
const permission = binding.value;
// 检查用户是否拥有该权限
if (!useAccess().hasPermission(permission)) {
el.style.display = 'none';
}
}
};
tagtag-module-iam
└── src
└── main
├── java
│ └── dev
│ └── tagtag
│ └── module
│ └── iam
│ ├── controller
│ │ ├── DeptController.java
│ │ ├── MenuController.java
│ │ ├── RoleController.java
│ │ └── UserController.java
│ ├── entity
│ │ ├── DeptEntity.java
│ │ ├── MenuEntity.java
│ │ ├── RoleEntity.java
│ │ ├── UserEntity.java
│ │ ├── UserRoleEntity.java
│ │ └── RolePermissionEntity.java
│ ├── mapper
│ │ ├── DeptMapper.java
│ │ ├── MenuMapper.java
│ │ ├── RoleMapper.java
│ │ ├── UserMapper.java
│ │ ├── UserRoleMapper.java
│ │ └── RolePermissionMapper.java
│ ├── service
│ │ ├── DeptService.java
│ │ ├── MenuService.java
│ │ ├── RoleService.java
│ │ └── UserService.java
│ └── util
│ └── DataPermissionUtil.java
└── resources
├── db
│ ├── schema.sql
│ └── data
│ ├── 00_iam_dept.sql
│ ├── 01_iam_role.sql
│ ├── 02_iam_user.sql
│ ├── 03_iam_menu.sql
│ ├── 04_iam_user_role.sql
│ └── 05_iam_role_menu.sql
└── mapper
└── iam
├── DeptMapper.xml
├── MenuMapper.xml
├── RoleMapper.xml
└── UserMapper.xml
frontend/apps/tagtag/src/views/modules/iam
├── dept
│ ├── data.ts
│ └── index.vue
├── menu
│ ├── FormModal.vue
│ ├── data.ts
│ └── index.vue
├── role
│ ├── data.ts
│ └── index.vue
└── user
├── DeptTree.vue
├── data.ts
└── index.vue
前端相关代码位于 frontend/apps/tagtag/src/views/modules/iam。
| 功能 | 页面路径 | 描述 |
|---|---|---|
| 用户管理 | /iam/user | 用户列表、新增/编辑弹窗 |
| 角色管理 | /iam/role | 角色列表、权限分配抽屉 |
| 菜单管理 | /iam/menu | 菜单树形表格、图标选择 |
| 部门管理 | /iam/dept | 部门树形维护 |
| 方法 | 端点 | 描述 |
|---|---|---|
| POST | /auth/login | 用户登录 (返回 JWT) |
| GET | /menus/routes | 获取当前用户的动态路由 |
| GET | /menus/tree | 获取菜单树形结构 |
| GET | /users | 获取用户列表 |
| POST | /users | 创建新用户 |
| PUT | /users | 更新用户信息 |
| DELETE | /users | 删除用户 |
| GET | /roles | 获取角色列表 |
| POST | /roles | 创建新角色 |
| PUT | /roles | 更新角色信息 |
| DELETE | /roles | 删除角色 |
| GET | /roles/permissions | 获取角色权限 |
| POST | /roles/permissions | 分配角色权限 |
| GET | /depts/tree | 获取部门树形结构 |
| POST | /depts | 创建新部门 |
| PUT | /depts | 更新部门信息 |
| DELETE | /depts | 删除部门 |
{模块}:{资源}:{操作}如果系统需要支持多租户,可以在 IAM 模块中添加租户管理功能:
集成第三方登录,如 OAuth 2.0、LDAP 等:
实现更细粒度的数据权限控制:
添加权限审计功能,记录用户的权限变更历史:
IAM 模块是 Tagtag Starter 系统的核心模块之一,负责系统的用户认证、授权以及组织架构管理。基于 RBAC 模型设计,实现了细粒度的权限控制,包括功能权限和数据权限。
通过 IAM 模块,管理员可以方便地管理用户、角色、菜单和部门,实现了权限的集中管理和灵活分配。同时,系统提供了完善的权限校验机制,确保只有授权用户才能访问系统资源。
IAM 模块的设计和实现遵循了模块化、可扩展的原则,便于后续功能扩展和定制化开发。