如果你从自己的用户账号中移除了系统管理员角色,或者移除了所有角色,你就会失去对用户、角色以及所有需要系统管理员权限的页面的访问权。大多数情况下,你可以自己恢复访问权限,不需要提交工单。
为什么会发生这种情况
Frappe 会在每个页面上检查你的角色。像用户列表、角色和角色权限管理器这样的页面,只有拥有系统管理员角色的用户才能看到。如果你编辑自己的用户记录并取消勾选系统管理员,或者取消勾选所有角色,那么你接下来打开的页面就是你已经无法看到的页面了。Frappe 不会在你保存一个会把自己锁在外面的更改之前提醒你。
例如,Bluepeak Technologies 的 Ayesha Khan 打开了自己的用户记录,想清理掉一些不再需要的角色,结果把系统管理员也一起取消勾选了。
roles-tab-uncheck-system-manager.png
在 dev16.localhost 上实时截取:Ayesha Khan 的用户表单的角色与权限选项卡,角色列表底部的系统管理员复选框已被清除,表单显示“未保存”。已端到端验证:取消勾选此框并保存会重现锁定问题,该账号的用户列表从 16 行降到 0 行。
她保存后,设置工作区从她的侧边栏消失了。如果她直接打开用户列表,列表加载出来没有任何行。如果她打开一个需要系统管理员权限的页面,比如角色权限管理器,她会看到:
错误
Not permitted to view Role Permission Manager
Administrator 用户是唯一的例外:无论“拥有角色”表中显示什么角色,Frappe 始终授予它所有权限。下面的每个选项都直接或间接地利用这一点来恢复你的访问权限。
自己修复
使用下面第一个适用于你的选项。
另一个用户仍然拥有系统管理员角色
请该用户执行以下操作:
- 前往用户列表并打开你的用户记录。
- 打开角色与权限选项卡。
- 勾选系统管理员。
- 点击保存。
注销后重新登录以应用更改。
从 bench 控制台重新添加角色
终端
bench --site yoursite.com console
在 In [1]: 提示符下,运行:
Python
user = frappe.get_doc("User", "your-email@example.com")
user.add_roles("System Manager")
从站点注销并重新登录。
如果你不想动自己的用户记录,也可以改为从命令行创建一个临时的第二个系统管理员用户,然后用它通过界面修复你的主账号:
终端
bench --site yoursite.com add-system-manager temp-admin@example.com \
--first-name Temp --password "a-strong-password"
通过 SSH 进入 bench 组
SSH 访问需要先创建一个私有的 bench 组并添加你的 SSH 密钥。参见 SSH 访问。一旦你能通过 SSH 登录,运行与选项 2 中相同的 bench --site yoursite.com console 命令和 user.add_roles("System Manager"),然后从你的站点注销并重新登录。
使用数据库访问
前往站点仪表盘 → 操作 → 访问站点数据库,如果你之前没用过,点击启用访问。使用显示的凭据通过 MariaDB 命令行客户端连接,然后运行:
SQL
INSERT INTO `tabHas Role`
(name, creation, modified, modified_by, owner, docstatus,
idx, parent, parentfield, parenttype, role)
VALUES
(UUID(), NOW(), NOW(), 'Administrator', 'Administrator', 0,
1, 'your-email@example.com', 'roles', 'User', 'System Manager');
通过这种方式所做的更改会跳过 Frappe 的正常保存步骤,因此对已经打开的会话不会生效。从你的站点注销并重新登录,角色才会生效。(已验证:直接在数据库中添加的角色只有在重新登录后才会出现——在那之前,正在运行的会话会一直保留旧的角色列表。)
重置 Administrator 密码
这在自托管环境中有效,或者在 Frappe Cloud 上,只要你像选项 2 或 3 那样拥有控制台或 SSH 访问权限也有效:
终端
bench --site yoursite.com set-admin-password "a-strong-new-password"
使用用户名 Administrator 和你刚设置的密码登录。Administrator 始终拥有完全访问权限,所以你现在可以打开自己的用户记录,并通过正常的角色与权限选项卡重新勾选系统管理员。
user-list-access-restored.png
在 dev16.localhost 上实时截取:Ayesha Khan 账号的系统管理员角色恢复后、她重新登录时的用户列表——列表再次显示全部 16 个用户(锁定期间为 0),右上角的+ 添加按钮也回来了。
如果这些都不适用于你
如果你的站点在共享的 Frappe Cloud bench 上,你没有数据库访问权限、没有其他系统管理员用户,也没有保存的 Administrator 密码,请在 support.frappe.io 上提交工单。支持人员会要求你从 Frappe Cloud 仪表盘(侧边菜单中的访问请求)批准一个站点访问请求,然后他们才能恢复你的角色。
如何预防
- 在每个站点上保留第二个拥有系统管理员角色的用户,作为常备的备用管理员。如果你把一个账号锁在外面,你可以在不到一分钟内从另一个账号修复它。
- 在从您自己的用户中移除角色之前,请检查它是否是最后一个系统管理员账户。
- 创建站点时,请将管理员密码保存在安全的地方。即使其他所有系统管理员账户都不在了,它也是您的备用方案。
相关
- 用户和权限
- 权限类型
- SSH 访问
- 数据库访问