注册一亩三分地论坛,查看更多干货!
您需要 登录 才可以下载或查看附件。没有帐号?注册账号 
x
我的米太少了, 什么面经也看不了,请大家加点米。
一、 题目描述
在一个基于角色与组的企业权限系统(RBAC)中,系统包含三种实体:用户(User)、用户组(Group) 和 摄像头(Camera)。 输入是一个权限关系列表 perms_data,其中每个元素均为三元组: (source, relationship, destination) 包含两种核心关系:
- "camera_owner": 格式:(entity, "camera_owner", camera_id) 含义:实体(用户或用户组)直接拥有该摄像头的访问与管理权限。
- "group_member": 格式:(entity, "group_member", group_id) 含义:实体(用户或子用户组)属于目标用户组。权限具有传递性:成员自动继承该用户组及其上层嵌套组所拥有的全部摄像头权限。
目标实现函数: def find_admin_user(perms_data: list[tuple[str, str, str]]) -> str | None: ...
找出拥有整个组织内全部摄像头访问权限的唯一超级管理员用户(ID 以 "user_" 开头)。若不存在能覆盖全部摄像头的单一用户,则返回 None。 ──────
二、 输入输出示例
示例 1 法
- 图建模:以实体为节点构建有向图。每个三元组 (src, rel, dst) 转换为一条从 src 到 dst 的有向边,表示权限的流向。
- 目标集合提取:通过遍历提取关系为 "camera_owner" 的全部摄像头集合 total_cams,以及全部前缀为 "user_" 的候选用户集合。
- 可达性搜索(DFS / BFS):对每个候选用户执行遍历,结合 seen 集合记录已访问节点以避免环路,收集所有可达的 camera_*。
- 集合匹配:检查候选用户的可达摄像头集合是否与 total_cams 相等,若相等则返回该用户 ID。若遍历结束均未匹配,返回 None。
我的米太少了, 什么面经也看不了,请大家加点米。 |