新闻详情

新闻详情

首页 / 资讯中心 / 详情

Orchard Core 1.6.0 升级指南:用户权限体系重构、TheAdmin 响应式布局与搜索模块增强

发布时间:2026/9/29 2:17:51来源:尧图网络
Orchard Core 1.6.0 升级指南:用户权限体系重构、TheAdmin 响应式布局与搜索模块增强
CMS后端Web框架【免费下载链接】OrchardCoreOrchard Core is an open-source modular and multi-tenant application framework built with ASP.NET Core, and a content management system (CMS) built on top of that framework.项目地址https://gitcode.com/gh_mirrors/or/OrchardCore点击查看免费下载Orchard Core 1.6.02023 年 3 月发布是一次以权限细化和管理界面现代化为核心的版本升级OrchardCore.Users模块引入了细粒度的用户管理权限TheAdmin主题新增了基于屏幕尺寸的响应式布局设置搜索与 Elasticsearch 模块也获得了多项增强。本文基于官方 1.6.0 发布说明结合仓库源码逐项讲解 Breaking Changes 的迁移要点、新权限模型的落地方式以及新功能的配置方法帮助你在升级现有部署时一次到位。版本概览1.6.0 发布说明src/docs/releases/1.6.0.md指出该版本包含大量 bug 修复、性能升级与功能增强并强烈建议现有 Orchard Core 部署升级到该版本。升级前需要特别关注以下几类破坏性变更用户管理权限从单一View Users细化为多个独立权限OrchardCore.Roles不再自动创建默认角色必须由 setup recipe 显式定义OrchardCore.Search的配置属性与若干 ViewModel 命名空间发生重命名OrchardCore.Features与OrchardCore.Recipes之间的自动依赖关系被移除。下面逐项展开。用户权限体系重构从View Users到细粒度权限权限变化背景在 1.6.0 之前只要拥有View Users权限即可看到后台的Users菜单项。1.6.0 之后权限模型被拆分为浏览用户列表、编辑用户、删除用户三个独立维度权限说明ListUsers允许列出所有用户EditUsers允许编辑任意用户DeleteUsers允许删除任意用户权限语义变化如下View Users现在仅允许查看某个用户的资料profileManageUsers是超级用户权限授予管理用户的全部访问权包括用户设置要看到后台的Users菜单项需要拥有ListUsers或至少一个ListUsersInRole_{0}变体权限。角色级权限当启用了OrchardCore.Roles功能时还会额外提供一组按角色细分的权限权限说明AssignRoleToUsers允许向用户分配任意角色ListUsersInRole_{0}允许列出指定角色中的用户EditUsersInRole_{0}允许编辑指定角色中的用户DeleteUsersInRole_{0}允许删除指定角色中的用户AssignRoleToUsers_{0}允许向指定角色分配用户其中{0}是角色名的占位符系统会为每个角色生成对应的权限实例。源码印证权限定义在 src/OrchardCore.Modules/OrchardCore.Users/Permissions.cs 中public static readonly Permission ManageUsers UsersPermissions.ManageUsers; public static readonly Permission ViewUsers UsersPermissions.ViewUsers; public static readonly Permission ManageOwnUserInformation UsersPermissions.EditOwnUser; public static readonly Permission EditOwnUser UsersPermissions.EditOwnUser; public static readonly Permission ListUsers UsersPermissions.ListUsers; public static readonly Permission EditUsers UsersPermissions.EditUsers; public static readonly Permission DeleteUsers UsersPermissions.DeleteUsers;角色级权限由 src/OrchardCore.Modules/OrchardCore.Users/Roles/Services/UserRolePermissions.cs 动态生成它通过IRoleService.GetAssignableRolesAsync()获取所有可分配角色并为每个角色调用CreateListUsersInRolePermission、CreateEditUsersInRolePermission等方法创建权限。值得注意的实现细节是——针对管理员Admin角色不会生成删除与分配权限因为删除/创建管理员这类操作被限制为仅管理员本人可用if (!await _roleService.IsAdminRoleAsync(roleName)) { // Do not create permissions for deleting or creating admins. // These operations are restricted to admin users only. permissions.Add(UsersPermissions.CreateDeleteUsersInRolePermission(roleName)); permissions.Add(UsersPermissions.CreateAssignRoleToUsersPermission(roleName)); }同时ManageUsers等全局权限的默认角色映射stereotype也定义在该模块中其中 Administrator 角色默认获得全部权限而 Editor、Moderator、Contributor、Author 仅获得编辑自己的用户信息这一项通用权限Permissions.cs。迁移建议升级后请重新检查各角色的权限配置若某个角色此前仅依赖View Users查看用户列表现在需要显式授予ListUsers或相应的ListUsersInRole_{0}负责用户维护的角色则需要补充EditUsers/DeleteUsers/AssignRoleToUsers等权限。OrchardCore.Roles默认角色不再自动创建1.6.0 起默认角色Administrator、Editor 等不再由OrchardCore.Roles自动创建setup recipe 中必须定义要使用的默认角色。不过OrchardCore.Roles功能仍然会在每次启用某个 feature 时自动把该 feature 已知的所有权限映射到已定义的角色上。这意味着两件事新建站点/租户时setup recipe 里要显式包含创建角色的步骤升级已有站点时若某个功能在升级过程中被重新启用其权限会自动同步到现有角色。关于如何在 recipe 中创建角色请参考 Roles Step 文档其基本思路是在 recipe 的steps中使用roles步骤定义角色名称与权限集合。OrchardCore.Search属性重命名与命名空间变更同时使用Lucene和Elasticsearch两个搜索提供商的场景下本次升级涉及一处配置项重命名SearchSettings类中的SearchProviderAreaName属性更名为ProviderName更新后需要通过该设置把默认搜索提供者指定为两者之一否则会出现歧义。此外还有两处命名空间调整属于编译期破坏性变更涉及自定义代码需要同步修改using类原命名空间新命名空间SearchFormViewModel、SearchIndexViewModel、SearchResultViewModelOrchardCore.Search.Abstractions.ViewModelsOrchardCore.Search.ViewModelsSearchSettingsOrchardCore.Search.ModelOrchardCore.Search.ModelsFeatures 与 Recipes 的依赖关系变化1.6.0 移除了OrchardCore.Recipes对OrchardCore.Features的自动启用依赖。这带来两个需要关注的点模块开发者如果你的模块在运行时使用 recipe 服务如IRecipeMigrator必须在模块的Manifest中显式添加对OrchardCore.Recipes.Core功能的依赖以确保这些服务在真正使用前已经可用站点运维如果 setup recipe 需要启用Features功能必须显式启用OrchardCore.Features不能再依赖 Recipes 间接启用它。新增功能OrchardCore.Notifications 模块1.6.0 新增了OrchardCore.Notifications模块用于向用户发送通知消息。该模块提供了一套统一的通知抽象消息发送、展示与用户偏好管理详细用法可参考 Notifications 模块文档。如果你此前依赖自定义的通知/站内信方案可以考虑迁移到该模块以获得与用户、后台 UI 的集成能力。OrchardCore.Contents后台列表需要ListContent权限在 1.6.0 之前只要拥有ViewContent权限且能访问后台就自动拥有访问 Content Items内容项列表的能力。本次升级后要在后台列出内容项用户需要ListContent权限ViewContent仅保留查看内容本身的语义。这意味着升级后仅授予ViewContent的角色将无法再看到后台内容列表需要为相应角色补充ListContent。TheAdmin 主题基于屏幕尺寸的响应式设置配置方式1.6.0 为TheAdmin主题新增了样式设置可让后台主题根据屏幕尺寸自适应布局。在appsettings.json中加入以下配置即可生效{ OrchardCore: { TheAdminTheme: { StyleSettings: { WrapperClasses: row mb-3, LimitedWidthWrapperClasses: row, LimitedWidthClasses: col-md-6 col-lg-5 col-xxl-4, StartClasses: col-lg-2 col-xl-3, EndClasses: col-lg-10 col-xl-9, LabelClasses: col-form-label text-lg-end col-lg-2 col-xl-3, OffsetClasses: offset-lg-2 offset-xl-3 } } } }这些类名均基于 Bootstrap 的栅格体系WrapperClasses控制字段外层包裹元素默认row mb-3StartClasses/EndClasses控制标签与输入区在栅格中的列宽如col-lg-2 col-xl-3与col-lg-10 col-xl-9OffsetClasses用于对齐。响应式断点前缀col-md-、col-lg-、col-xxl-让后台在平板、桌面与超宽屏下呈现不同布局。自定义部件/字段编辑器的迁移要求如果第三方主题/模块提供了自定义的 Part 或 Field 编辑器视图要想适配新的响应式设置必须改用新的视图 Helper。官方给出了三步改造法调用Orchard.GetInputWrapperCssClasses()获取输入外层包裹元素的 CSS 类调用Orchard.GetLabelCssClasses()获取 label 元素的 CSS 类用一个div等元素把与 label 对应的所有元素分组再用Orchard.GetEndCssClasses()获取该新div的 CSS 类。以TitlePart.Edit.cshtml为例改造前固定mb-3包裹 无 class 的 labeldiv classmb-3 asp-validation-class-forTitle label asp-forTitleT[Title]/label input asp-forTitle classform-control content-preview-text content-caption-text disabled(Model.Settings?.Options TitlePartOptions.GeneratedDisabled) autofocusautofocus dirculture.GetLanguageDirection() / span asp-validation-forTitle/span if (!String.IsNullOrWhiteSpace(Model.Settings?.Pattern)) { switch (Model.Settings?.Options) { case TitlePartOptions.Editable: span classhintT[Leave empty to auto-generate the title using the pattern.]/span break; case TitlePartOptions.GeneratedDisabled: span classhintT[The title will be auto-generated using the pattern.]/span break; } } /div改造后wrapper 使用GetWrapperCssClasses()label 使用GetLabelCssClasses()输入区用GetEndCssClasses()包裹!-- In the wrapper element we use the GetWrapperCssClasses() helper to get the proper classes. -- div classOrchard.GetWrapperCssClasses() asp-validation-class-forTitle !-- The GetLabelCssClasses() helper is used in the label element. -- label asp-forTitle classOrchard.GetLabelCssClasses()T[Title]/label !-- This div was added to group the corresponding element. Additionally, GetEndCssClasses() is used to get the proper classes. -- div classOrchard.GetEndCssClasses() input asp-forTitle classform-control content-preview-text content-caption-text disabled(Model.Settings?.Options TitlePartOptions.GeneratedDisabled) autofocusautofocus dirculture.GetLanguageDirection() / span asp-validation-forTitle/span if (!String.IsNullOrWhiteSpace(Model.Settings?.Pattern)) { switch (Model.Settings?.Options) { case TitlePartOptions.Editable: span classhintT[Leave empty to auto-generate the title using the pattern.]/span break; case TitlePartOptions.GeneratedDisabled: span classhintT[The title will be auto-generated using the pattern.]/span break; } } /div /divHelper 速查表本次新增的全部 Helper 及其用途如下Helper说明Orchard.GetWrapperCssClasses()获取包裹元素的 CSS 类Orchard.GetLabelCssClasses()获取 label 元素的 CSS 类Orchard.GetStartCssClasses()获取起始区块的 CSS 类例如需要把元素推到末端以便与 label 对齐时Orchard.GetEndCssClasses()获取结束区块的 CSS 类Orchard.GetEndCssClasses(bool withOffset)获取结束区块的 CSS 类可选择是否附带偏移Orchard.GetOffsetCssClasses()获取用于对齐末端元素的偏移类Orchard.GetLimitedWidthWrapperCssClasses()获取受限宽度元素外层包裹的 CSS 类Orchard.GetLimitedWidthCssClasses()用于具有受限宽度的字段如number元素可参考NumericField.Edit.cshtml视图改造完自定义编辑器后字段/部件编辑界面即可与 TheAdmin 的响应式设置联动在不同屏幕宽度下获得一致的间距与对齐效果。搜索模块增强Search Form 组件与索引路由OrchardCore.Search在 1.6.0 中新增了Search Form组件widget可以把搜索表单作为组件直接放到站点的任意布局区域如侧边栏、页脚。同时搜索入口路径得到扩展除了默认的/search路径外现在还可以使用/search/{indexName}其中{indexName}是搜索索引的名称可直接针对某个索引执行搜索。为便于按需覆盖视图本次新增了以下视图文件视图作用Search-List.cshtml渲染搜索页面Search-Form.cshtml渲染搜索表单Search-Results.cshtml搜索执行后渲染搜索结果SearchFormPart.cshtml使用Search Form组件时渲染搜索表单这些视图遵循 Orchard Core 的 Shape 覆盖机制——在主题目录中放置同名.cshtml即可覆盖默认渲染无需修改模块源码。Elasticsearch全量分析器支持与IndexPrefix分析器支持1.6.0 起OrchardCore.Elasticsearch支持 Elasticsearch 的全部内置分析器以及自定义分析器。默认情况下仅提供standard分析器你可以通过配置 Elasticsearch 服务来按需添加更多内置或自定义分析器。从源码看分析器与分词过滤器token filter的加载逻辑位于 src/OrchardCore.Modules/OrchardCore.Elasticsearch/Extensions/ElasticsearchOptionsExtensions.csAddAnalyzers从配置节读取Analyzers并逐项注入ElasticsearchOptions.Analyzers当未配置任何分析器时会自动兜底注册standard默认分析器if (options.Analyzers.Count 0) { // When no analyzers are configured, well define a default analyzer. options.Analyzers.Add(ElasticsearchConstants.DefaultAnalyzer, new JsonObject { [type] ElasticsearchConstants.DefaultAnalyzer, }); }AddTokenFilters则负责加载TokenFilters配置节供自定义分析器组合使用。IndexPrefix 全局索引前缀此外OrchardCore_Elasticsearch配置新增了IndexPrefix设置用于为所有索引定义一个全局前缀。在需要按环境区分索引的场景下例如同一集群中隔离开发/测试/生产环境可以按环境设置不同的前缀避免索引名冲突。其实现同样位于 ElasticsearchOptionsExtensions.csinternal static ElasticsearchOptions AddIndexPrefix(this ElasticsearchOptions options, IConfigurationSection configuration) { options.IndexPrefix configuration.GetValuestring(nameof(options.IndexPrefix)); return options; }配置示例appsettings.json{ OrchardCore: { OrchardCore_Elasticsearch: { IndexPrefix: myapp-prod } } }升级检查清单综合以上变更从 1.5.x 升级到 1.6.0 时建议按以下顺序核对权限为需要管理用户的角色授予ListUsers/EditUsers/DeleteUsers或角色级变体为需要访问后台内容列表的角色授予ListContent角色定义确认 setup recipe 中显式定义了默认角色Roles 不再自动创建搜索配置若同时启用 Lucene 与 Elasticsearch将SearchProviderAreaName重命名为ProviderName并指定默认提供者检查自定义代码中的 ViewModel/SearchSettings命名空间引用Features/Recipes 依赖使用 recipe 服务的模块在 Manifest 中补充OrchardCore.Recipes.Core依赖需要启用 Features 的 setup recipe 显式启用OrchardCore.FeaturesTheAdmin 主题按需在appsettings.json配置TheAdminTheme:StyleSettings并改造自定义 Part/Field 编辑器视图以使用新的 CSS Helper搜索与 Elasticsearch体验新的Search Form组件与/search/{indexName}路由按需配置分析器与IndexPrefix。对照本清单逐项处理后即可平滑完成 1.6.0 的升级并充分享受细粒度权限控制、响应式后台与增强搜索能力带来的收益。赞分享CMS后端Web框架【免费下载链接】OrchardCoreOrchard Core is an open-source modular and multi-tenant application framework built with ASP.NET Core, and a content management system (CMS) built on top of that framework.项目地址https://gitcode.com/gh_mirrors/or/OrchardCore点击查看免费下载相关推荐polar-sh/nextjs 适配器完全指南在 Next.js 中集成 Polar 支付、客户门户与 Webhookspolar sh/nextjs 适配器完全指南在 Next.js 中集成 Polar 支付、客户门户与 Webhooks 导读 本文以 polar sh/CMS后端Web框架grocy 3.0.0 升级指南用户权限、外部认证与库存体系重构全解析grocy 3.0.0 升级指南用户权限、外部认证与库存体系重构全解析 本文基于 grocy 官方 changelog 中 3.0.0 版本发布说明 cha后端前端【安全升级】K8M v0.0.87突破性发布集群授权功能重构与用户组权限体系详解【安全升级】K8M v0.0.87突破性发布集群授权功能重构与用户组权限体系详解 引言多集群权限管理的痛点与解决方案 你是否还在为KubernetesK8云原生集群管理后端前端AI 应用大模型MCP 服务运维上一篇探索无限滚动的魅力ngInfiniteScroll深度解析与应用推荐下一篇Tauri 应用快速入门基于 create-tauri-app创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

基于 SWIFT(魔搭社区)训练 DeepSeek 模型完整代码示例:从 config.toml 骨架到推理验证 2026/9/29 5:09:03

基于 SWIFT(魔搭社区)训练 DeepSeek 模型完整代码示例:从 config.toml 骨架到推理验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
AI绘图实战:豆包“吃骂”原理与三条调教铁律 2026/9/29 5:09:01

AI绘图实战:豆包“吃骂”原理与三条调教铁律

实话讲,我以前对AI绘图工具是有点“敬而远之”的,总觉得提示词像玄学,写得再花哨,出来的图也常常离题万里。直到我认真用了一阵子豆包的绘图功能,才发现问题不在它身上,往往在我自己,尤其是我的…

阅读更多 →
DeepSeek婚姻家事财产分割智能计算方案:从选型到落地 2026/9/29 5:08:55

DeepSeek婚姻家事财产分割智能计算方案:从选型到落地

简介:面向法律科技从业者、算法工程师及婚姻家事研究者,DeepSeek婚姻家事案件财产分割智能计算方案聚焦夫妻共同财产范围自动界定与公平分配方案生成。内容从财产属性分类、婚前婚后界定、债务识别到房产增值比例计算,覆盖婚姻财产分割中常见…

阅读更多 →
归并排序完全指南:从分治思想到工业级应用 2026/9/29 5:08:54

归并排序完全指南:从分治思想到工业级应用

排序算法是算法学习里绕不开的主题。很多人一开始学的是冒泡、选择、插入这类 O(n) 的入门排序,然后有一天突然碰到归并排序——代码骤然变长,还有递归,第一反应往往是“这玩意儿到底在干嘛”。但归并排序值得你认真搞懂,因为它可…

阅读更多 →
2.4G遥控协议深度解析:FrSky、TBS与ELRS对比及高频头改装指南 2026/9/29 5:08:48

2.4G遥控协议深度解析:FrSky、TBS与ELRS对比及高频头改装指南

1. 从一次失控说起:为什么2.4G协议值得深挖入模十几年,我炸过的机、丢过的舵机、失控过的车,加起来能装一后备箱。但真正让我下决心把2.4G协议这条线彻底摸清楚的,是前几年一次固定翼远航——飞到八百米开外,遥控突然进…

阅读更多 →
Claude Code接入MCP完整指南:配置流程与高频报错排查 2026/9/29 5:08:48

Claude Code接入MCP完整指南:配置流程与高频报错排查

先交代一个背景。Claude Code 是 Anthropic 出品的命令行编程代理,装在本地之后可以直接在终端里跟它对话,让它读项目文件、改代码、跑测试、操作 Git,甚至可以替你把一条命令链完整执行完。它自带的能力再强,本质上还是围绕“本地…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉