权限系统设计:大厂B端产品面试真题解析

四季读书网 1 0
权限系统设计:大厂B端产品面试真题解析

一、面试官的「灵魂拷问」

面试官微笑着说:"来,设计一个企业级权限管理系统。"

我心里一紧。这不是简单的"增删改查",而是B端产品的核心基础设施

我深吸一口气,开始拆解...

二、题意拆解:面试官到底在考什么?

表面看是考功能设计,实际是考三层能力:

考察维度 核心考点 面试官期待
业务抽象 RBAC vs ABAC 知道什么时候用什么
架构思维 数据模型 + 接口设计 能支撑百万级用户
场景覆盖 数据权限 + 功能权限 边界条件考虑周全

三、核心论点:3个关键设计决策

论点1:RBAC是地基,ABAC是天花板

RBAC(基于角色的访问控制)解决80%的场景:

• 用户 → 角色 → 权限 → 资源

• 适合组织架构清晰的企业

ABAC(基于属性的访问控制)解决复杂场景:

• 规则:"部门=销售部 AND 职级≥经理"

• 适合动态、细粒度的权限需求

论点2:权限判定要「预计算 + 实时校验」双轨制

• 用户登录时:预计算角色权限 → 写入缓存

• 访问资源时:实时校验数据权限 → 防止越权

论点3:数据权限比功能权限更难做

功能权限:"能不能点这个按钮"

数据权限:"能不能看这条数据"

后者需要解决行级、列级、字段级的精细控制

四、高分答案示例:系统架构全景图

1. 核心数据模型

# 用户-角色-权限模型(RBAC)

class User:

user_id: string # 用户唯一标识

roles: List[Role] # 多角色支持

dept_id: string # 所属部门(用于数据权限)

class Role:

role_id: string

permissions: List[Permission]

data_rules: List[DataRule] # 数据权限规则

class Permission:

resource: string # 资源标识:order:read

action: enum # CREATE/READ/UPDATE/DELETE

2. 权限校验流程

# 权限校验伪代码

def check_permission(user, resource, action):

# 1. 功能权限校验(查缓存)

if not has_function_permission(user, resource, action):

return False

# 2. 数据权限校验(实时计算)

data_filter = build_data_filter(user, resource)

return data_filter

3. 数据权限规则引擎

规则类型 示例 适用场景
行级规则 dept_id = user.dept_id 只能看本部门数据
列级规则 hide columns: salary, phone 敏感字段脱敏
字段级规则 amount > 10000 需审批 业务规则触发

⚠️ 面试官避坑指南

• 别忘了考虑权限继承(部门主管自动拥有下属权限)

• 别忘了权限回收(员工离职/调岗时的处理)

• 别忘了性能优化(权限变更时的缓存失效策略)

五、反向追问:给面试官的「钩子」

回答完后,主动抛出这些问题,展示你的深度思考:

1. 关于扩展性:

"如果未来需要支持跨租户权限(SaaS多租户场景),您建议如何调整当前架构?"

2. 关于安全:

"在零信任架构下,权限校验应该放在网关层还是服务层?各自的优劣是什么?"

3. 关于业务:

"贵司的权限场景更偏向强流程管控(如金融)还是灵活协作(如互联网)?这会影响规则引擎的设计偏向。"

六、总结

权限管理是B端产品的「地基工程」

好的权限设计要做到:

模型清晰:RBAC + ABAC 分层

性能可控:预计算 + 实时校验

场景覆盖:功能 + 数据 + 字段三级权限

💡 核心认知:权限系统不是功能堆砌,而是业务规则的技术化表达。理解业务,才能设计好权限。

抱歉,评论功能暂时关闭!