v13 → v17 Guide Simple Dashboards v17
Checklist
Section titled “Checklist”- Convert constructor/fluent configuration to property/manifest overrides on
SimpleDashboard - Replace
Allow/Deny/AddAccessRulewithIConditionManifest[](useConditionManifest.Create(...)) - Migrate one dashboard first
- Verify in backoffice
- Then batch‑migrate the rest
Before → After
Section titled “Before → After”| v13 (legacy / constructor) | v17 (manifest / property) |
|---|---|
SetName("Title"); | public override string Name => "Title"; |
SetName("Title","en-GB"); | public override Dictionary<string, string> LocalizedNames => new() {{ "en", "Title (en)" }}; |
AddSection(Constants.Applications.Media); | public override string[] Sections => new[] { Constants.Applications.Media }; |
AddAccessRule(SimpleAccessRule.AllowAdminGroup); | Conditions with ConditionManifest.Create("Umb.Condition.CurrentUser.GroupId", Constants.Security.AdminGroupKey.ToString()) |
Allow(x => x.UserGroup("myGroup")); | Add ConditionManifest using the group’s GUID/key (or resolve alias→GUID at startup) |
Deny(x => x.UserGroup("other")); | Add ConditionManifest using the group’s GUID/key (or resolve alias→GUID at startup) |
[Umbraco.Cms.Core.Composing.Weight(-100)] or ctor ordering | public override int Weight => -100; |
Views in /Views/Dashboard/Name.cshtml | ✅ unchanged — naming/location rules remain the same |
DashboardViewComponent / DashboardAsyncViewComponent | ✅ unchanged — view components still work |
Minimal examples
Section titled “Minimal examples”Legacy (v13)
Section titled “Legacy (v13)”[Umbraco.Cms.Core.Composing.Weight(-100)]public class LegacyExampleDashboard : SimpleDashboard{ public LegacyExampleDashboard() { SetName("Example Dashboard Name (default)"); SetName("Example Dashboard Name (en-GB)", "en-GB"); AddSection(Constants.Applications.Media); AddSection(Constants.Applications.Content); AddAccessRule(SimpleAccessRule.AllowEditorGroup); Allow(x => x.UserGroup("myGroup")); Deny(x => x.UserGroup("myOtherGroup")); }}Migrated (v17)
Section titled “Migrated (v17)”using jcdcdev.Umbraco.Core.Web.Models.Manifests;using Umbraco.Cms.Core;
public class ExampleDashboard : SimpleDashboard{ public override string Name => "Example Dashboard Name (default)"; public override int Weight => -100; public override string[] Sections => new[] { Constants.Applications.Media, Constants.Applications.Content };
public override IConditionManifest[] Conditions => new[] { // built‑in Admin group example ConditionManifest.Create("Umb.Condition.CurrentUser.GroupId", Constants.Security.AdminGroupKey.ToString()),
// custom group: replace with resolved GUID ConditionManifest.Create("Umb.Condition.CurrentUser.GroupId", "<my-group-guid>") };}Quick notes
Section titled “Quick notes”- Views: keep
/Views/Dashboard/{ClassNameWithoutDashboard}.cshtml. - Group aliases: v17 condition operands usually expect GUIDs (group Key). If you used aliases, add a small startup
helper to resolve alias→Key and populate
Conditions. - Ordering: Override
Weight. - Troubleshooting: If a dashboard is missing, verify
Sectionscontains correct aliases and eachConditionManifestoperand is valid (GUID vs alias mismatch is the most common issue).
Support & Contact
Section titled “Support & Contact”- Report issues: GitHub issues
- Contact: Contact page