在DNN中如何修改ToolBarButtonExtensionControl的权限?
DNN DigitalDocuments模块工具栏非Host账号按钮不可用解决方案
你所用的ToolBarButtonExtensionControl控件权限判断逻辑优先级高于DNN默认的页面、模块权限,具体排查和解决方法如下:
1. 核心规则说明
该控件的权限判断默认遵循以下顺序:
- 优先读取控件绑定的
IsHost属性值,只有Host账号登录时IsHostPortal才会返回true,此时直接启用所有按钮 - 若
IsHost为false,不会读取DNN默认的模块编辑/查看权限,而是校验DigitalDocuments模块自带的专属权限配置,这也是你配置常规权限不生效的核心原因
2. 标准修复步骤
- 登录Host账号,进入对应DigitalDocuments模块的模块设置页面,找到独立的「Digital Documents 权限」子标签(不要用DNN默认的「模块权限」配置页),找到上传文件、新建文件夹、批量上传对应的权限项,给目标用户所属角色勾选允许权限
- 若上述配置后仍未生效,检查控件后端逻辑:找到路径
/DesktopModules/DigitalDocuments/Controls/ToolBarButtonExtensionControl.cs的后端代码,查看按钮渲染逻辑,若存在仅对IsHost为true的账号启用按钮的硬编码规则,调整判断逻辑即可,示例修改参考:
// 原逻辑 if (IsHost) { EnableAllToolBarButtons(); } // 修改后逻辑,加入专属权限判断 if (IsHost || CheckModulePermission("UploadFile") || CheckModulePermission("CreateFolder")) { EnableAllToolBarButtons(); }
- 所有配置修改完成后,清空DNN系统缓存、重启应用池后再用非Host账号测试,排除缓存导致的配置不生效问题
3. 临时应急方案
如果使用的是闭源的第三方DigitalDocuments扩展,无法修改后端代码,可以临时用前端JS方案处理:在模块页加入JS脚本,非Host账号登录时移除按钮的disabled属性,注意该方案必须配合后端接口权限校验使用,避免出现越权操作风险
内容的提问来源于stack exchange,提问作者jhutchings
相关产品推荐
相关产品推荐

