Any user’s access to site data is determined by their access rights. Your access rights determine what data you can see, and what data you can modify. They also determine what data items you can create, and which you can delete, if any.
Some of these access rights are established by your site’s developers, but a business user with the right permissions can set certain access rights for other users. And yes, permissions is just another name for access rights!
Available Rights
The following access rights can be granted:
- Read
- Change
- Create
- Remove
Naturally, some of these are usually combined. It doesn’t make much sense to have Change permissions without also having Read permission. Likewise, being able to create an item usually means you will need to be able to change its values.
Permission Hierarchy
The following permissions may be defined in Backoffice:
Type Permissions define your access rights to an entire data type, like Product or PriceRow. The actions that can be granted or denied are Read, Change, Create, and Delete. By default, Read and Change permissions to a Type instance extend to its attributes.
Attribute Permissions allow or restrict Read and Change access to individual attributes of a Type instance, overriding the Type-level permission for that specific attribute.
More general access rights exist, called Global permissions, which grant access to functionality, such as catalog version synchronization or activating workflows. They must be set by developers and so aren’t covered in this course.
In a similar vein, more specific access rights also exist, called Item permissions. These allow fine-grained access control to permit or restrict access to individual item instances. There can be significant performance implications to using Item Permissions, and they can only be set by developers. For those reasons, we won’t be discussing them further.
Assigning Permissions (Access Rights)
Permissions can be assigned to a user or a user group. The permissions assigned to a user group are inherited by all users who belong to that user group. This is the preferred way to assign permissions.
A user groups can contain other user groups, who inherit its permissions. Each subgroup may override these inherited permissions, expanding or restricting the effective access rights inherited by their users.
In the example below, special_projects inherits read:granted / change:denied to the Product item from its parent, project_group. If a user belongs to multiple user groups, either directly or hierarchically, they inherit the permissions of all these groups. In the event of a conflict, the permissions closest to the user in the hierarchy take precedence.
In the example below, Brigit is granted read and change access to the Product type based on her membership in the product_mgmt group, but she is denied change access based on her membership in project_group. However, her membership in product_mgmt is closer in the hierarchy, so it takes precedence, and she is granted change access..
Note
And if access is granted by one parent user group and denied by another parent user group on the same hierarchy level, then the access is denied for users and subgroups inheriting from both. That is to say, in case of doubt, pick ‘deny’.

More on Assigning Permissions
Let’s enhance the previous example a bit:
To keep it simple, special_projects inherits again from its parent, project_group, but this time explicitly alters access to the approval property of Product, prohibiting it from being read or changed.
In our example, Brigit is again implicitly granted read and change access to all the properties of Product from product_mgmt, but denied change access to the ‘approval’ property based on her membership in special_projects. Since the conflicting permissions on this property are both equally distant from Brigit in the hierarchy, the most restrictive one is picked, so the access is set to 'deny'.
This is illustrated in the diagram below. Everything known from the previous example is grayed out to put your focus on the parts that have changed.
Note
Typically permissions are defined for user groups and inherited by their assigned users as described above. In rare cases it is also acceptable to give permissions directly to a user. In our case it would be theoretically possible to explicitly grant Brigit read access to the ‘approval’ property – but we decided against it.



