T Toutadmin文档

谁能看到什么

Toutadmin 没有需要逐格勾选的权限矩阵。它只有两种角色、四项横向权限、一套从组织架构推导出来的 管理关系,以及一条简单规则:空间在加载任何一条数据之前就先拒绝进入。本页列出全部规则,与代码 中所写完全一致。

原则#

各项检查并不散落在各个界面里。它们集中在同一个地方——Node 侧是 src/middleware/,PHP 侧是 App\Core\Kernel——每个请求在路由之前都要经过 它。因此整套访问策略可以一口气读完,也不会漏掉任何新页面。

访问被拒绝时,产品不会说明原因:它只是带着一条中性提示把人送回原来的空间。啰嗦的错误 提示会让好奇者知道该界面确实存在,以及需要哪项权限。

两种角色#

角色是什么
admin 管理方。唯一能创建账户、授予权限、开启模块、改动邮箱地址与邮件服务器设置、管理通讯录隐藏、 阅读审计日志、执行备份还原的一方。
employee 成员。自己的个人空间、通讯录、日程、只读排班、申请、共享保险柜、知识库、以申领方式使用的 库存。其余一切都取决于某项权限或某个管理职责。
只有管理方能添加成员

没有公开注册,没有开放的邀请链接,也没有身份提供方自动建号。账户只能由已登录的管理员创建, 且该操作会被记入日志。这是设计决定,不是配置项:没有任何开关能打开它。

管理方看不到的东西#

三处刻意保留的例外,在那里身为管理员并不够:

  • 内部举报。举报有可能指向某位管理员。只有被指定的受理人能读取举报内容; 管理方负责指定他们,自己在那里什么也读不到。
  • 用访问码打开的保险柜格。用访问码打开的会话永远不是管理会话,不论账户背后 是谁。
  • 专属于员工的空间。/mon-espace/agenda 会把管理方 送回它自己的仪表板:管理账户既没有假期余额,也没有上级,更没有工资单。

四项横向权限#

管理 → 权限中逐项授予具名成员。每个区块在您点击之前就会显示其覆盖范围:授予一项 权限时,您清楚它打开了什么。

权限打开什么覆盖范围
is_hr
人力资源
/rh/parcours/sante-securite/accueil,以及保险柜管理 全体非自由职业人员的申请、假期余额和工资单。
is_finance
财务管理
/gestion/partenaires/flotte/pieces/import,以及库存中受限的一侧 往来单位、合同、发票、预算、报销、资产设备和会议室。
is_it
信息技术
/informatique/developpement 软件资产、应用访问权限和信息系统故障。
is_referent
内部举报机制
/alertes/signalements/… 举报的受理,员工满五十人起为强制要求。

权限是叠加的:它只打开空间,不关闭任何空间。一名成员可以同时持有多项。 管理方隐含地拥有全部权限——除上述三处例外。

不靠勾选的管理关系#

这里没有“经理”复选框。您之所以带团队,是因为在组织架构中被任命为某个部门或 某个小组的负责人。/mon-equipe 空间向至少负责一个范围的人开放, 而它列出的人员,恰好就是那些范围内的人——一个不多。

负责人仅在自己的范围内获得:

  • 本团队请假与申请的审批;
  • 一对一面谈;
  • 排班的写入权限;
  • /qualite 空间;
  • 知识库的撰写权限。

经营分析#

/pilotage 面向整家公司:它向管理方、财务和人力资源开放。这是唯一一个访问条件为 两项权限之并集、而非其中之一的界面。

读取开放,写入受限#

有四个空间区分的是 HTTP 动词而非空间本身:看是开放的,动手不是。这与“隐藏界面”恰好相反—— 一份谁都读不到的排班表,对谁都没有用。

空间读取写入
/planning所有人管理者、人力资源、管理方
/base-de-connaissances所有人,以文章自身的可见范围为界管理者、人力资源、管理方
/evenements所有人人力资源与管理方——但报名和取消报名除外,人人都可处理自己的名额
/stock人人都可申领所需物品物料、出入库、采购单和发票:财务

仅限管理方,不可委派#

空间原因
/admin账户、组织架构、权限、模块、外观。
/securite审计日志、会话、密码策略。
/sauvegardes一次还原会重写整个数据库。
/rgpd个人数据的导出与删除。
/integrationsAPI 令牌与 Webhook:等于向公司数据开了一扇门。
/direction合并后的管理层视图。
/juridique股东、法定代表、股东会。
/demandes/types定义一种申请类型,就是在编写一条审批链路。

双重上锁的空间#

有七个空间属于可选模块。它们需要两个条件:模块已开启,并且持有相应 权限。模块关闭时,页面不会回答“拒绝访问”,而是回答 404。关闭的模块等同于 不存在,从中推断不出任何信息。

空间模块另需的权限
/comptabilite会计财务
/paie薪资引擎人力资源
/facturation-electronique电子发票财务
/stock库存与采购读取开放,写入需财务
/tresorerie资金管理财务
/immobilisations固定资产财务
/crm商务 CRM财务

职工委员会#

/cse 空间向全体员工开放;/cse/gestion 只向当选委员开放。是不是管理员 在这里毫无影响:要么当选,要么没有。

签署夹#

每个人都能看到并签署与自己相关的文件。而创建签署夹、撤回签署夹、或查看他人的签署夹,则需要 人力资源权限或管理方身份。

成员自己不能修改的内容#

有三个字段只能由管理方修改,各版本皆然,而且根本不出现在个人资料页中:

  • 邮箱地址——它就是登录账号。
  • 账户的 IMAP 与 SMTP 设置
  • 从通讯录中隐藏——一份人人都能把自己抹掉的公司通讯录,就不再是通讯录了。

成员仍然自主掌握:自己的密码、头像、简介、电话、显示语言和双重验证。

与其猜测规则,不如直接查证#

整套策略就在一个文件里。要查看某个路径适用的规则:

# PHP 版
grep -n "/pilotage" app/Core/Kernel.php

# Node 版
grep -rn "/pilotage" src/middleware/

两个版本承载同样的规则,各自写了一遍,并由同样的场景加以验证:对每一个受限空间,测试套件都 包含一个用例,用无权限的账户尝试进入,并要求必须被拒绝。

Toutadmin 文档 —— 构建于 2026-09-13。 独立站点,与软件本身分离。