谁能看到什么
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 | 个人数据的导出与删除。 |
/integrations | API 令牌与 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。 独立站点,与软件本身分离。