[{"data":1,"prerenderedAt":344},["ShallowReactive",2],{"docs-doc-\u002Fdocs\u002Fmechanism\u002Fpermission":3,"docs-live-paths":293},{"id":4,"title":5,"body":6,"description":279,"extension":280,"meta":281,"navigation":288,"path":289,"seo":290,"stem":291,"__hash__":292},"content\u002Fdocs\u002Fmechanism\u002Fpermission.md","权限体系：从菜单到数据行",{"type":7,"value":8,"toc":268},"minimark",[9,27,31,38,60,63,67,74,81,96,101,105,112,178,181,185,192,203,212,216,223,226,232,238,244,247],[10,11,12],"blockquote",{},[13,14,15,16,21,22,26],"p",{},"本文解决什么问题：正式系统上线后，「谁能看到什么、能改什么」是最先被问到的安全话题。日常怎么配见",[17,18,20],"a",{"href":19},"\u002Fdocs\u002Fsystem\u002Foverview","用户、角色与菜单权限","；这篇补上背后的机制——",[23,24,25],"strong",{},"三层权限各拦什么、数据行级怎么生效、为什么界面藏起来不等于没有权限","。",[28,29,30],"h2",{"id":30},"一句话机制",[13,32,33,34,37],{},"衍数的权限把「一个人能碰系统到什么程度」拆成",[23,35,36],{},"三件递进的事","：",[39,40,41,48,54],"ol",{},[42,43,44,47],"li",{},[23,45,46],{},"菜单","——能进哪些页面（侧边栏看到什么入口）；",[42,49,50,53],{},[23,51,52],{},"按钮\u002F操作","——在某个页面上能做什么（看列表、新增、改、删、导出……）；",[42,55,56,59],{},[23,57,58],{},"数据行","——即使能进页面，也只能看到与自己授权范围相符的那部分数据（如本部门数据）。",[13,61,62],{},"三层是叠加关系：进不了菜单，后面两层谈不上；进了菜单但没勾「删除」，删不动；能删，也只能删自己权限范围内的行。",[28,64,66],{"id":65},"为什么是两层校验而不只是藏按钮","为什么是「两层校验」，而不只是藏按钮",[13,68,69,70,73],{},"界面上最常见的权限表现是「按钮不显示\u002F不可点」——这层是",[23,71,72],{},"体验层","。如果只靠它，绕过界面直接调请求仍可能越权。",[13,75,76,77,80],{},"衍数把权限做成",[23,78,79],{},"前端显示 + 后端拦截","两层：",[82,83,84,90],"ul",{},[42,85,86,89],{},[23,87,88],{},"前端","：按当前用户能执行的动作，决定列表页里出现哪些按钮——不能删的人，界面上根本没有「删除」入口；",[42,91,92,95],{},[23,93,94],{},"后端","：真正的判断在请求到达数据层之前再执行一次——即使构造一个不经过界面的请求，服务端同样会校验并拒绝越权动作。",[10,97,98],{},[13,99,100],{},"结论：界面隐藏只是「让不该看见的人不被打扰」，不是安全本身；安全由后端的第二次校验兜底。",[28,102,104],{"id":103},"数据范围四级从全公司到只自己","数据范围：四级，从「全公司」到「只自己」",[13,106,107,108,111],{},"能进某个页面之后，「能看到哪些数据行」由角色的",[23,109,110],{},"数据范围","决定，通常四档：",[113,114,115,130],"table",{},[116,117,118],"thead",{},[119,120,121,124,127],"tr",{},[122,123,110],"th",{},[122,125,126],{},"含义",[122,128,129],{},"典型适用",[131,132,133,145,156,167],"tbody",{},[119,134,135,139,142],{},[136,137,138],"td",{},"全部数据",[136,140,141],{},"可看所有数据行",[136,143,144],{},"总部\u002F管理员",[119,146,147,150,153],{},[136,148,149],{},"本部门及子部门",[136,151,152],{},"本部门 + 下级部门的数据",[136,154,155],{},"分管经理",[119,157,158,161,164],{},[136,159,160],{},"仅本部门",[136,162,163],{},"只看自己部门录入的数据",[136,165,166],{},"部门负责人",[119,168,169,172,175],{},[136,170,171],{},"仅本人",[136,173,174],{},"只看自己录入的数据",[136,176,177],{},"一线员工",[13,179,180],{},"例如「仓库」角色配成「仅本部门」，那么即便它拥有库存列表的菜单与查看权限，打开列表时看到的基本上只是自己仓库那部分——同一个页面，不同角色打开是不同的可见范围。",[28,182,184],{"id":183},"为什么按行过滤不需要为每张表单独配","为什么「按行过滤」不需要为每张表单独配",[13,186,187,188,191],{},"很多系统要做到「部门只看本部门数据」，需要在每张业务表上手工加一个部门字段、再写过滤逻辑。衍数的动态模型在发布时",[23,189,190],{},"自动记录每一行由谁、在哪个部门创建","（作为不可见的框架信息随数据保存），数据范围过滤直接基于它执行：",[82,193,194,197,200],{},[42,195,196],{},"不需要业务实施方为每张表设计「权限字段」；",[42,198,199],{},"新发布一个业务模型，天然具备按创建部门\u002F创建人做行级过滤的能力；",[42,201,202],{},"「仅本人」「仅本部门」这类诉求，配角色数据范围即可，不必动模型。",[10,204,205],{},[13,206,207,208,211],{},"提醒：行级过滤仅在",[23,209,210],{},"模型开启数据权限","时生效——个别模型（如公开字典）明确不需要按人隔离时，可以不开启。开启与否由模型配置决定，不是所有表一刀切。",[28,213,215],{"id":214},"与-ai-数字员工的关系","与 AI 数字员工的关系",[13,217,218,219,222],{},"AI 数字员工（如自动生成报表、代查数据）不是凌驾于权限之上运行，而是",[23,220,221],{},"作为一位「使用者」被同一套角色\u002F数据范围约束","：它只能读它被授权范围内的数据、只能执行它被允许的动作，越权请求同样被拒绝。也就是说，您给员工配的权限口径，与给人配的权限共用同一套规则——AI 不会成为绕过权限的后门。",[28,224,225],{"id":225},"常见疑问",[13,227,228,231],{},[23,229,230],{},"把菜单藏起来，是不是就等于没权限了？","\n不等于。菜单隐藏是体验层的处理；是否真正有权，以后端的动作校验为准。所以配置时请把两者都配好：界面按角色显示、后端按角色拦截。",[13,233,234,237],{},[23,235,236],{},"数据范围能细到「某几个指定部门」吗？","\n内置的四档覆盖了最常见的诉求（全部\u002F本部门及子部门\u002F本部门\u002F仅本人）。需要更细粒度的按指定范围授权时，属于进阶定制，请在实施阶段与交付方确认。",[13,239,240,243],{},[23,241,242],{},"改了角色权限，要多久生效？","\n角色与数据范围在平台内有统一缓存与刷新机制，权限变更后会随之生效；涉及登录会话的变更建议重新登录后确认。具体生效节奏以实际部署环境为准。",[28,245,246],{"id":246},"相关阅读",[82,248,249,254,261],{},[42,250,251,252],{},"权限日常怎么配（使用层）→ ",[17,253,20],{"href":19},[42,255,256,257],{},"数据从哪来、模型的创建与发布 → ",[17,258,260],{"href":259},"\u002Fdocs\u002Fconcepts\u002Fcore","动态数据模型 · 衍枢",[42,262,263,264],{},"AI 与权限同一套口径 → ",[17,265,267],{"href":266},"\u002Fdocs\u002Fconcepts\u002Fai","AI 数字员工",{"title":269,"searchDepth":270,"depth":270,"links":271},"",2,[272,273,274,275,276,277,278],{"id":30,"depth":270,"text":30},{"id":65,"depth":270,"text":66},{"id":103,"depth":270,"text":104},{"id":183,"depth":270,"text":184},{"id":214,"depth":270,"text":215},{"id":225,"depth":270,"text":225},{"id":246,"depth":270,"text":246},"平台的权限分三层把关——能进哪些页面、在每个页面上能做什么、能看到哪些数据行。本文讲这层机制怎么运转、为什么「界面隐藏 ≠ 无权限」。","md",{"audience":282,"type":283,"section":284,"pr_order":285,"role":286,"duration":287},"public","mechanism","框架机制与边界",1,"系统管理员 \u002F 实施搭建者","约 5 分钟",true,"\u002Fdocs\u002Fmechanism\u002Fpermission",{"title":5,"description":279},"docs\u002Fmechanism\u002Fpermission","laZMyx4bAUJr9W9_wcXZtT37TN8CBvrXK_jGqUS-43k",[294,295,297,298,300,302,304,306,308,310,312,314,316,318,320,322,324,326,328,330,332,334,335,337,339,341,343],{"path":266},{"path":296},"\u002Fdocs\u002Fconcepts\u002Fai-team",{"path":259},{"path":299},"\u002Fdocs\u002Fconcepts\u002Fflux",{"path":301},"\u002Fdocs\u002Fconcepts\u002Fmetrics",{"path":303},"\u002Fdocs\u002Fconcepts\u002Fview",{"path":305},"\u002Fdocs\u002Fdemo-center",{"path":307},"\u002Fdocs\u002Fdeploy\u002Foverview",{"path":309},"\u002Fdocs\u002Ffaq",{"path":311},"\u002Fdocs\u002Fglossary",{"path":313},"\u002Fdocs\u002Fguide\u002Fai-kb",{"path":315},"\u002Fdocs\u002Fguide\u002Fcrud",{"path":317},"\u002Fdocs\u002Fguide\u002Fdb-connect",{"path":319},"\u002Fdocs\u002Fguide\u002Fmodel-gen",{"path":321},"\u002Fdocs\u002Fintro\u002Fframeworks",{"path":323},"\u002Fdocs\u002Fintro\u002Foverview",{"path":325},"\u002Fdocs\u002Fintro\u002Fvalue",{"path":327},"\u002Fdocs\u002Fintro\u002Fwhy",{"path":329},"\u002Fdocs\u002Fmechanism\u002Fai-employee-task",{"path":331},"\u002Fdocs\u002Fmechanism\u002Fdata-flux",{"path":333},"\u002Fdocs\u002Fmechanism\u002Fmetrics-contract",{"path":289},{"path":336},"\u002Fdocs\u002Fmechanism\u002Fpublish",{"path":338},"\u002Fdocs\u002Fquickstart\u002Fclone-template",{"path":340},"\u002Fdocs\u002Fquickstart\u002Fdemo-30s",{"path":342},"\u002Fdocs\u002Fquickstart\u002Ffive-minutes",{"path":19},1788586879703]