Skip to content

Permissions

Permissions are a declaration of an action that can be executed on a resource. They describe the intrinsic capabilities or operations available on that resource (e.g. read a datastream, or update a station), independent of any specific user.

Permissions granted to a user (also called privileges) can be found in two locations in Dendra. This is done to keep the access token size efficient, and to allow organization membership and role changes to take effect immediately without reissuing the access token.

LocationDescriptionResource DomainExample
Access TokenPermissions granted to a user based on their assigned roles in the IAM. Listed in the permissions claim in the access token.System (Equipment, Units, Vocabularies)create:unit update:vocabulary
ResourcePermissions granted to a user based on their assigned role in an organization. Listed in the resource’s effective_rights field.Organization (Datastreams, Stations)read:datastream update:station

Organization resources (resources that belong to an organization) break this down even further to the individual resource level.

ResourceFieldDescriptionExample
Organizationeffective_rights field of the Organization resource.Statements of what you can do with or within the organization.create:datastream update:organization
Datastreameffective_rights field of the Datastream resource.Statements of what you can do with the datastream.read:datastream update:datastream
Siteeffective_rights field of the Site resource.Statements of what you can do with the site.read:site:geo.exact update:site
Stationeffective_rights field of the Station resource.Statements of what you can do with the station.read:station:file.private update:station
Membershipeffective_rights field of the Membership resource.Statements of what you can do with the membership.read:membership:email update:membership

Based on a user’s role in an organization and the resource they are acting on, a role policy is selected to provide the list of permissions that the user has for that resource.

Below are the current role policies in the system by resource. These are subject to change.

RolePermissions
Memberread:integration_config:settings read:file_import_manifest read:organization:file.private
Curatorcreate:file_import_manifest create:integration_config create:datastream create:site create:station discover:table read:integration_config:settings read:file_import_manifest read:organization:file.private read:table_info update:file_import_manifest update:integration_config update:organization update:table_info
Admincreate:file_import_manifest create:integration_config create:datastream create:membership create:site create:station delete:integration_config delete:organization discover:table read:integration_config:settings read:file_import_manifest read:organization:file.private read:table_info set:feature_flags update:file_import_manifest update:integration_config update:organization update:table_info
RolePermissions
Memberread:datastream:file.private
Curatorread:datastream:file.private update:datastream
Admindelete:datastream read:datastream:file.private update:datastream
RolePermissions
Memberread:site:file.private read:site:geo.exact
Curatorread:site:file.private read:site:geo.exact update:site
Admindelete:site read:site:file.private read:site:geo.exact update:site
RolePermissions
Memberread:station:file.private
Curatorread:station:file.private update:station
Admindelete:station read:station:file.private update:station
RolePermissions
MemberNone (default policy when acting on another user’s membership)
Curatorread:membership:email read:membership:join_message read:membership:note update:membership update:membership:is_pending update:membership:is_revoked update:membership:note
Admindelete:membership read:membership:email read:membership:join_message read:membership:note update:membership update:membership:is_pending update:membership:is_revoked update:membership:email update:membership:name update:membership:note update:membership:role

Permissions are assigned specifically at each level and are mutually exclusive across locations. You can therefore check a single location. If needed, permissions can be resolved in this order:

  1. Check the effective_rights field of the resource itself.
  2. Check the effective_rights field of the resource’s Organization resource (if applicable).
  3. Check the permissions claim in the access token.