Exam Area: Area 1 – Product Knowledge (15%) Reference: https://docs.developers.optimizely.com/content-management-system/docs/default-roles-and-groups
CMS 12 ships with the following default roles/groups:
| Role | Description |
|---|---|
| WebAdmins | Full access to Admin UI and all content |
| WebEditors | Access to Edit View; can create/edit/publish content |
| Administrators | Windows local admin (if using Windows Auth) — not recommended |
| Everyone | All authenticated and anonymous users |
| Authenticated Users | All logged-in users (any role) |
| Anonymous | Unauthenticated visitors |
| View | URL / Entry | Purpose |
|---|---|---|
| Edit View | /episerver/cms/ | Content editing, page tree, media |
| Admin View | /episerver/cms/admin | Site configuration, users, content types |
| Visit View | The actual website URL | Visitor-facing rendered site |
| Preview | Edit view → Preview button | Read-only draft preview |
| On-Page Edit | Default mode in Edit View | Inline editing overlay |
| All Properties | Edit view → switch view | Form-based property editor |
Access to content is controlled by Access Control Lists (ACLs) per content item:
| Access Level | Description |
|---|---|
| Read | Can view the content (visitor-facing) |
| Create | Can create new child content |
| Edit | Can edit the content |
| Delete | Can delete the content |
| Publish | Can publish/unpublish |
| Administer | Can change access rights on this item |
| FullAccess | All of the above |
| NoAccess | Explicitly denied |
// Check access in code
bool canEdit = _contentAccessEvaluator.HasAccess(
content: page,
principal: PrincipalInfo.CurrentPrincipal,
access: AccessLevel.Edit);
Role-based:
WebEditors → Can access Edit View
WebAdmins → Can access Admin View
Content-based (ACL):
/StartPage/News/ → WebEditors: Read, Create, Edit
→ NewsEditors: Read, Create, Edit, Publish
→ WebAdmins: FullAccess
public class SecurityService
{
private readonly IContentAccessEvaluator _accessEvaluator;
public SecurityService(IContentAccessEvaluator accessEvaluator)
{
_accessEvaluator = accessEvaluator;
}
public bool CanPublish(IContent content)
{
return _accessEvaluator.HasAccess(
content,
PrincipalInfo.CurrentPrincipal,
AccessLevel.Publish);
}
}
// IContentSecurityRepository manages ACLs
public class AclService
{
private readonly IContentSecurityRepository _securityRepo;
public AclService(IContentSecurityRepository securityRepo)
{
_securityRepo = securityRepo;
}
public void GrantEditorAccess(ContentReference content, string roleName)
{
var descriptor = (IContentSecurityDescriptor)
_securityRepo.Get(content).CreateWritableClone();
descriptor.AddEntry(new AccessControlEntry(
name: roleName,
access: AccessLevel.Read | AccessLevel.Create | AccessLevel.Edit,
entityType: SecurityEntityType.Role));
_securityRepo.Save(content, descriptor, SecuritySaveType.ReplaceChildPermissions);
}
}
When Content Approvals are enabled, these additional roles/states exist:
Draft → AwaitingApproval → Approved (Published) / RejectedCMS 12 supports Virtual Roles — custom roles defined in configuration that evaluate based on request context:
{
"EPiServer": {
"CMS": {
"VirtualRoles": {
"Administrators": { "MappedRoles": ["WebAdmins"] },
"Creator": {
"RoleType": "EPiServer.Security.CreatorRole, EPiServer.CMS.Core"
}
}
}
}
}
The Creator virtual role matches only the original author of a content item.