多角色权限分层架构:Java家政平台商户端、师傅端、用户端、平台后台源码讲解
家政服务平台属于典型的多终端、多角色协同系统,平台后台、入驻商户、服务师傅、普通用户四类角色权责完全不同,涉及订单管理、服务接单、商户入驻、用户消费、平台管控等差异化业务场景。如果采用单一权限体系开发,极易出现权限越界、数据泄露、功能混用等问题。
多数初创家政项目开发中,常存在权限设计扁平化的问题,所有终端共用一套登录接口与权限校验规则,仅靠前端隐藏按钮区分功能,后端无严格权限拦截。这种模式存在极大安全隐患,比如师傅可篡改商户信息、普通用户可访问后台管控接口、越权查看他人订单数据等。而标准化的多角色分层权限架构,从后端接口、数据层级、资源访问、终端路由多维度做隔离,实现不同角色权责清晰、数据独立、互不干扰,是家政平台稳定运行的核心基础。
本次源码架构基于经典RBAC权限模型优化升级,适配家政平台多终端特性,摒弃传统单一角色授权模式,采用「终端分层+角色分级+数据权限隔离」的架构设计,核心技术采用SpringBoot、SpringSecurity、MyBatis-Plus,通过自定义权限注解、全局拦截器、数据过滤工具类,完成四大终端的权限精准管控,适配家政平台的业务运营场景。
一、家政平台四大角色终端权责与权限痛点
在架构设计前,需要明确四类核心角色的业务边界,这是分层权限设计的核心依据,所有源码逻辑均围绕角色权责差异化开发。
平台后台管理员角色,拥有最高管控权限,负责商户审核、师傅资质核验、平台订单监管、服务类目配置、用户管理、违规处罚等全局操作,可查看平台全量数据,是平台的核心管控终端。商户角色仅负责自身门店的订单管理、服务上架、营收统计、师傅绑定与管理,仅能操作和查看自身商户名下数据,无平台全局配置权限。师傅角色属于服务执行端,核心权限为接单、查看服务订单、更新服务状态、核对结算账单,仅可操作个人关联的服务数据。普通用户角色权限最简单,仅包含下单、查看个人订单、评价、收藏服务等个人用户相关操作,无法触碰商户、平台、师傅的业务数据。
传统权限架构的核心痛点集中三点,一是角色权限粒度粗糙,无法区分终端专属操作;二是仅做功能权限拦截,未做数据权限隔离,易出现跨数据越权访问;三是多终端共用认证逻辑,登录态混乱、接口防护失效。本次分层架构从源码层面针对性解决以上问题。
二、多角色分层权限整体架构设计
本次采用四层分层权限架构,自上而下依次为终端路由层、认证拦截层、功能权限层、数据权限层,层层校验、层层隔离,从访问入口到数据查询形成完整权限闭环,所有分层逻辑均有对应源码实现,结构清晰、便于迭代维护。
终端路由层针对四大终端做差异化路由隔离,平台后台、商户端、师傅端、用户端配置独立的接口路由前缀,从请求入口区分终端类型,避免不同终端接口混用。认证拦截层基于SpringSecurity实现统一认证,自定义用户认证体系,区分四类角色的登录凭证与会话时效,拦截非法登录与跨终端访问请求。
功能权限层通过自定义权限注解,对所有业务接口做角色绑定,精准控制不同角色的接口访问权限,比如平台管理员可调用商户审核接口,商户、师傅、用户均无访问权限。数据权限层是家政平台的核心优化点,在业务层统一过滤数据,不同角色查询数据时,自动拼接数据过滤条件,实现用户查个人订单、商户查门店数据、师傅查个人工单、管理员查全量数据的差异化效果。
三、核心数据库权限表结构设计(源码底层依托)
整套权限体系依托五张核心数据表实现,适配多角色分层管控,表结构简洁且贴合家政业务,无冗余字段,也是后续权限源码逻辑的底层支撑。核心包含用户表、角色表、权限表、用户角色关联表、角色权限关联表,同时新增终端类型字段,区分四大终端角色。
用户表存储四类终端用户基础信息,通过user_type字段区分平台管理员、商户、师傅、普通用户;角色表定义固定角色编码,绑定对应终端类型;权限表存储所有接口与功能权限标识;两张关联表实现用户与角色、角色与权限的多对多绑定,支持一个用户绑定多个角色,适配复合型业务场景。
四、核心源码分层实现与终端权限隔离逻辑
本文聚焦项目核心源码,讲解四大终端的权限隔离、认证拦截、接口校验、数据过滤核心代码,剔除冗余基础代码,保留可直接落地的核心逻辑。
1、自定义多角色认证核心代码
区别于通用权限系统,家政平台需要区分终端角色做差异化认证,自定义用户上下文实体,封装角色类型、终端标识、所属商户ID、师傅ID等核心字段,为后续数据权限过滤提供依据。核心认证代码片段如下:
@Component public class UserAuthContext { // 存储当前登录用户信息,线程隔离保证并发安全 private static ThreadLocal<UserAuthInfo> userAuth = new ThreadLocal<>(); // 设置登录用户权限信息 public static void setUserAuthInfo(UserAuthInfo authInfo) { userAuth.set(authInfo); } // 获取当前用户角色类型 public static Integer getUserType() { UserAuthInfo authInfo = userAuth.get(); return Objects.nonNull(authInfo) ? authInfo.getUserType() : null; } // 获取当前用户所属商户ID,商户、师傅专用 public static Long getShopId() { UserAuthInfo authInfo = userAuth.get(); return Objects.nonNull(authInfo) ? authInfo.getShopId() : null; } }
通过ThreadLocal实现用户权限信息的线程隔离,保证接口并发请求时权限数据不混乱,同时可快速获取当前用户的角色类型和所属主体ID,为数据过滤提供统一入口。
2、接口层级权限注解与拦截源码
项目自定义权限注解,绑定指定终端角色,实现接口精准拦截,避免跨角色访问。所有终端接口均通过该注解做权限管控,无需重复编写权限判断逻辑,代码解耦性更高。
// 自定义终端权限校验注解 @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface TerminalPermission { // 允许访问的角色类型集合 Integer[] allowUserType(); }
配合SpringAOP实现注解拦截,在接口执行前校验当前用户角色,若不在允许访问的角色范围内,直接拦截请求并返回无权限提示。平台后台接口仅允许管理员访问,商户管理接口仅商户与管理员可访问,师傅接单接口仅师傅角色可调用,从接口层面实现第一层权限隔离。
3、四大终端差异化数据权限过滤源码
数据权限是家政平台权限架构的核心,也是区别于普通权限系统的关键。通过统一的业务数据过滤工具类,根据当前登录用户角色,自动拼接SQL查询条件,实现数据隔离。核心过滤逻辑如下:
@Component public class HousekeepingDataFilter { // 根据用户角色自动过滤订单数据 public void buildOrderQueryWrapper(LambdaQueryWrapper<HouseOrder> wrapper) { Integer userType = UserAuthContext.getUserType(); Long shopId = UserAuthContext.getShopId(); Long userId = UserAuthContext.getUserId(); if (userType == 1) { // 平台管理员:查询全部数据,无需过滤 return; } else if (userType == 2) { // 商户:仅查询自身门店订单 wrapper.eq(HouseOrder::getShopId, shopId); } else if (userType == 3) { // 师傅:仅查询自身承接订单 wrapper.eq(HouseOrder::getWorkerId, userId); } else if (userType == 4) { // 普通用户:仅查询个人下单订单 wrapper.eq(HouseOrder::getUserId, userId); } } }
该段源码实现了四类角色的数据精准隔离,相同的订单查询接口,不同角色登录会自动查询对应权限范围内的数据,既保证接口复用性,又彻底杜绝越权查询数据的问题,完美适配家政平台多终端业务场景。
五、各终端权限业务落地细则
平台后台管理员终端,拥有全功能、全数据权限,可操作商户审核、服务类目配置、订单监控、用户管理、数据统计等所有功能,无数据过滤限制,主要用于平台运维与监管。
商户端终端权限做严格限制,功能上仅开放门店管理、服务发布、订单处理、营收统计、师傅绑定功能,无法访问平台配置、其他商户数据、用户隐私数据;数据层面仅能查询、操作自身门店的所有订单与服务数据,实现商户数据独立隔离。
师傅端为轻量化权限体系,功能仅保留接单、订单进度更新、服务核销、账单查询,无任何配置类权限;数据层面仅关联个人承接的服务工单,无法查看其他师傅订单、商户核心营收数据,保障服务端数据安全。
用户端权限最精简,仅开放个人中心、下单、订单管理、评价反馈等个人操作功能,只能查看和操作自身产生的订单数据,无法访问任何商户、师傅、平台的后台资源。
六、权限架构优化亮点与落地总结
本次多角色分层权限架构,区别于传统扁平化权限设计,通过「终端路由隔离+接口注解拦截+数据层级过滤」三层防护,彻底解决家政多终端系统的权限安全问题。架构优势贴合实际项目运营,无过度优化与技术堆砌,首先是角色权责清晰,四大终端权限完全解耦,适配家政平台的协同运营模式;其次是安全性高,后端多层权限校验,杜绝前端绕过、接口越权、数据泄露等常见问题;最后是拓展性强,新增角色、新增终端无需重构核心逻辑,仅需配置角色权限与数据过滤规则即可快速适配。
整套源码架构基于Spring生态开发,适配主流Java项目开发规范,代码复用率高、维护成本低,不仅适用于家政服务平台,也可复用在同城服务、本地生活、多商户服务类项目中。本文从架构逻辑、表结构、核心源码、业务落地全维度讲解多角色分层权限设计,可为同类多终端Java项目的权限架构开发提供完整的实战参考。
更多推荐

所有评论(0)