All roles include one or more predefined system policies, and can be applied to principals to enforce these policies.
You can manage custom roles, where you select the system policies.
You can view system roles, which contain a fixed set of system policies and are provided by Cloudinary.
- list - Get roles
- create - Create custom role
- get - Get role
- update - Update custom role
- delete - Delete custom role
- list_principals - Get a role's principals
- update_principals - Assign principals to a role
Retrieve all system and custom roles of a specific permission_type (global or content-specific). Optionally filter by scope_type, management_type, and policy_parameters.
require 'cloudinary_account_provisioning'
Models = ::CldProvisioning::Models
s = ::CldProvisioning::CldProvisioning.new(
account_id: '<id>',
security: Models::Shared::Security.new(
provisioning_api_key: 'CLOUDINARY_PROVISIONING_API_KEY',
provisioning_api_secret: 'CLOUDINARY_PROVISIONING_API_SECRET'
)
)
req = Models::Operations::GetRolesRequest.new(
scope_type: Models::Shared::ScopeTypeEnum::PRODENV,
permission_type: Models::Shared::PermissionTypeEnum::GLOBAL,
management_type: Models::Shared::ManagementTypeEnum::SYSTEM
)
res = s.roles.list(request: req)
unless res.nil?
# handle response
end| Parameter | Type | Required | Description |
|---|---|---|---|
request |
Models::Operations::GetRolesRequest | ✔️ | The request object to use for the request. |
T.nilable(Models::Shared::RolesResponse)
| Error Type | Status Code | Content Type |
|---|---|---|
| Models::Errors::PermissionsErrorResponse | 401, 403 | application/json |
| Models::Errors::PermissionsErrorResponse | 500 | application/json |
| Errors::APIError | 4XX, 5XX | */* |
Create a new custom role.
require 'cloudinary_account_provisioning'
Models = ::CldProvisioning::Models
s = ::CldProvisioning::CldProvisioning.new(
account_id: '<id>',
security: Models::Shared::Security.new(
provisioning_api_key: 'CLOUDINARY_PROVISIONING_API_KEY',
provisioning_api_secret: 'CLOUDINARY_PROVISIONING_API_SECRET'
)
)
res = s.roles.create(create_role: Models::Shared::CreateRole.new(
id: 'sensitive_account_details_manager_88825hl',
permission_type: 'global',
scope_type: Models::Shared::ScopeTypeEnum::ACCOUNT,
name: 'Sensitive account details manager',
description: 'Responsible for managing users and account security.',
system_policy_ids: [
'cld::global::users_and_groups::manage',
'cld::policy::global::account_security::manage',
]
))
unless res.nil?
# handle response
endrequire 'cloudinary_account_provisioning'
Models = ::CldProvisioning::Models
s = ::CldProvisioning::CldProvisioning.new(
account_id: '<id>',
security: Models::Shared::Security.new(
provisioning_api_key: 'CLOUDINARY_PROVISIONING_API_KEY',
provisioning_api_secret: 'CLOUDINARY_PROVISIONING_API_SECRET'
)
)
res = s.roles.create(create_role: Models::Shared::CreateRole.new(
id: 'upload_manager_12334565',
permission_type: 'global',
scope_type: Models::Shared::ScopeTypeEnum::PRODENV,
name: 'Upload manager',
description: 'Responsible for managing upload presets and uploading new assets.',
system_policy_ids: [
'cld::policy::global::upload_presets::manage',
'cld::policy::global::folder_and_asset_management::create_asset',
]
))
unless res.nil?
# handle response
endrequire 'cloudinary_account_provisioning'
Models = ::CldProvisioning::Models
s = ::CldProvisioning::CldProvisioning.new(
account_id: '<id>',
security: Models::Shared::Security.new(
provisioning_api_key: 'CLOUDINARY_PROVISIONING_API_KEY',
provisioning_api_secret: 'CLOUDINARY_PROVISIONING_API_SECRET'
)
)
res = s.roles.create(create_role: Models::Shared::CreateRole.new(
id: 'marketing_content_contributor_1357fhe',
permission_type: 'content',
scope_type: Models::Shared::ScopeTypeEnum::PRODENV,
name: 'Marketing content contributor',
description: 'View all assets in selected folders and contribute to those folders, without permission to download.',
system_policy_ids: [
'cld::policy::content::folder::view_download',
'cld::policy::content::folder::add_assets',
]
))
unless res.nil?
# handle response
endrequire 'cloudinary_account_provisioning'
Models = ::CldProvisioning::Models
s = ::CldProvisioning::CldProvisioning.new(
account_id: '<id>',
security: Models::Shared::Security.new(
provisioning_api_key: 'CLOUDINARY_PROVISIONING_API_KEY',
provisioning_api_secret: 'CLOUDINARY_PROVISIONING_API_SECRET'
)
)
res = s.roles.create(create_role: Models::Shared::CreateRole.new(
id: 'upload_manager_12334565',
permission_type: 'global',
scope_type: Models::Shared::ScopeTypeEnum::PRODENV,
name: 'Upload manager',
description: 'Responsible for managing upload presets and uploading new assets.',
system_policy_ids: [
'cld::policy::global::upload_presets::manage',
'cld::policy::global::folder_and_asset_management::create_asset',
]
))
unless res.nil?
# handle response
endrequire 'cloudinary_account_provisioning'
Models = ::CldProvisioning::Models
s = ::CldProvisioning::CldProvisioning.new(
account_id: '<id>',
security: Models::Shared::Security.new(
provisioning_api_key: 'CLOUDINARY_PROVISIONING_API_KEY',
provisioning_api_secret: 'CLOUDINARY_PROVISIONING_API_SECRET'
)
)
res = s.roles.create(create_role: Models::Shared::CreateRole.new(
id: 'upload_manager_12334565',
permission_type: 'global',
scope_type: Models::Shared::ScopeTypeEnum::PRODENV,
name: 'Upload manager',
description: 'Responsible for managing uploads and uploading new assets.',
system_policy_ids: [
'cld::policy::global::upload_presets::manage',
'cld::policy::global::folder_and_asset_management::create_asset',
]
))
unless res.nil?
# handle response
endrequire 'cloudinary_account_provisioning'
Models = ::CldProvisioning::Models
s = ::CldProvisioning::CldProvisioning.new(
account_id: '<id>',
security: Models::Shared::Security.new(
provisioning_api_key: 'CLOUDINARY_PROVISIONING_API_KEY',
provisioning_api_secret: 'CLOUDINARY_PROVISIONING_API_SECRET'
)
)
res = s.roles.create(create_role: Models::Shared::CreateRole.new(
id: 'upload_manager_12334565',
permission_type: 'global',
scope_type: Models::Shared::ScopeTypeEnum::PRODENV,
name: 'Upload manager',
description: 'Responsible for managing upload presets and uploading new assets.',
system_policy_ids: [
'cld::policy::global::upload_presets::manage',
'cld::policy::global::folder_and_asset_management::create_asset',
]
))
unless res.nil?
# handle response
endrequire 'cloudinary_account_provisioning'
Models = ::CldProvisioning::Models
s = ::CldProvisioning::CldProvisioning.new(
account_id: '<id>',
security: Models::Shared::Security.new(
provisioning_api_key: 'CLOUDINARY_PROVISIONING_API_KEY',
provisioning_api_secret: 'CLOUDINARY_PROVISIONING_API_SECRET'
)
)
res = s.roles.create(create_role: Models::Shared::CreateRole.new(
id: 'upload_manager_12334565',
permission_type: 'global',
scope_type: Models::Shared::ScopeTypeEnum::PRODENV,
name: 'Upload manager',
description: 'Responsible for managing upload presets and uploading new assets.',
system_policy_ids: [
'cld::policy::global::upload_presets::manage',
'cld::policy::global::folder_and_asset_management::create_asset',
]
))
unless res.nil?
# handle response
endrequire 'cloudinary_account_provisioning'
Models = ::CldProvisioning::Models
s = ::CldProvisioning::CldProvisioning.new(
account_id: '<id>',
security: Models::Shared::Security.new(
provisioning_api_key: 'CLOUDINARY_PROVISIONING_API_KEY',
provisioning_api_secret: 'CLOUDINARY_PROVISIONING_API_SECRET'
)
)
res = s.roles.create(create_role: Models::Shared::CreateRole.new(
id: 'upload_manager_12334565',
permission_type: 'global',
scope_type: Models::Shared::ScopeTypeEnum::PRODENV,
name: 'Upload manager',
description: 'Responsible for managing upload presets and uploading new assets.',
system_policy_ids: [
'cld::policy::global::upload_presets::manage',
'cld::policy::global::folder_and_asset_management::create_asset',
]
))
unless res.nil?
# handle response
end| Parameter | Type | Required | Description |
|---|---|---|---|
create_role |
Models::Shared::CreateRole | ✔️ | Role details. |
account_id |
T.nilable(::String) | ➖ | Account ID |
T.nilable(Models::Shared::RoleResponse)
| Error Type | Status Code | Content Type |
|---|---|---|
| Models::Errors::PermissionsErrorResponse | 400, 401, 403, 409 | application/json |
| Models::Errors::PermissionsErrorResponse | 500 | application/json |
| Errors::APIError | 4XX, 5XX | */* |
Get a specific system or custom role.
require 'cloudinary_account_provisioning'
Models = ::CldProvisioning::Models
s = ::CldProvisioning::CldProvisioning.new(
account_id: '<id>',
security: Models::Shared::Security.new(
provisioning_api_key: 'CLOUDINARY_PROVISIONING_API_KEY',
provisioning_api_secret: 'CLOUDINARY_PROVISIONING_API_SECRET'
)
)
req = Models::Operations::GetRoleRequest.new(
role_id: '<id>',
param_key: [
'folder_id',
],
param_value: [
'asdfjkl12347890',
]
)
res = s.roles.get(request: req)
unless res.nil?
# handle response
end| Parameter | Type | Required | Description |
|---|---|---|---|
request |
Models::Operations::GetRoleRequest | ✔️ | The request object to use for the request. |
T.nilable(Models::Shared::RoleResponse)
| Error Type | Status Code | Content Type |
|---|---|---|
| Models::Errors::PermissionsErrorResponse | 401, 403, 404 | application/json |
| Errors::APIError | 4XX, 5XX | */* |
Update a specific custom role by providing all relevant details, including those you want to keep as-is.
Note: Updating a role with a name that already exists will trigger a 409 error.
require 'cloudinary_account_provisioning'
Models = ::CldProvisioning::Models
s = ::CldProvisioning::CldProvisioning.new(
account_id: '<id>',
security: Models::Shared::Security.new(
provisioning_api_key: 'CLOUDINARY_PROVISIONING_API_KEY',
provisioning_api_secret: 'CLOUDINARY_PROVISIONING_API_SECRET'
)
)
res = s.roles.update(role_id: '<id>', role: Models::Shared::Role.new(
name: 'Upload manager',
description: 'Responsible for managing upload presets and uploading new assets.',
system_policy_ids: [
'cld::policy::global::upload_presets::manage',
'cld::policy::global::folder_and_asset_management::create_asset',
]
))
unless res.nil?
# handle response
endrequire 'cloudinary_account_provisioning'
Models = ::CldProvisioning::Models
s = ::CldProvisioning::CldProvisioning.new(
account_id: '<id>',
security: Models::Shared::Security.new(
provisioning_api_key: 'CLOUDINARY_PROVISIONING_API_KEY',
provisioning_api_secret: 'CLOUDINARY_PROVISIONING_API_SECRET'
)
)
res = s.roles.update(role_id: '<id>', role: Models::Shared::Role.new(
name: 'Upload manager',
description: 'Responsible for managing upload presets and uploading new assets.',
system_policy_ids: [
'cld::policy::global::upload_presets::manage',
'cld::policy::global::folder_and_asset_management::create_asset',
]
))
unless res.nil?
# handle response
endrequire 'cloudinary_account_provisioning'
Models = ::CldProvisioning::Models
s = ::CldProvisioning::CldProvisioning.new(
account_id: '<id>',
security: Models::Shared::Security.new(
provisioning_api_key: 'CLOUDINARY_PROVISIONING_API_KEY',
provisioning_api_secret: 'CLOUDINARY_PROVISIONING_API_SECRET'
)
)
res = s.roles.update(role_id: '<id>', role: Models::Shared::Role.new(
name: 'Upload manager',
description: 'Responsible for managing upload presets and uploading new assets.',
system_policy_ids: [
'cld::policy::global::upload_presets::manage',
'cld::policy::global::folder_and_asset_management::create_asset',
]
))
unless res.nil?
# handle response
endrequire 'cloudinary_account_provisioning'
Models = ::CldProvisioning::Models
s = ::CldProvisioning::CldProvisioning.new(
account_id: '<id>',
security: Models::Shared::Security.new(
provisioning_api_key: 'CLOUDINARY_PROVISIONING_API_KEY',
provisioning_api_secret: 'CLOUDINARY_PROVISIONING_API_SECRET'
)
)
res = s.roles.update(role_id: '<id>', role: Models::Shared::Role.new(
name: 'Upload manager',
description: 'Responsible for managing uploads and uploading new assets.',
system_policy_ids: [
'cld::policy::global::upload_presets::manage',
'cld::policy::global::folder_and_asset_management::create_asset',
]
))
unless res.nil?
# handle response
end| Parameter | Type | Required | Description |
|---|---|---|---|
role_id |
::String | ✔️ | A unique identifier for the role. |
role |
Models::Shared::Role | ✔️ | Role details |
account_id |
T.nilable(::String) | ➖ | Account ID |
T.nilable(Models::Shared::RoleResponse)
| Error Type | Status Code | Content Type |
|---|---|---|
| Models::Errors::PermissionsErrorResponse | 400, 401, 403, 404, 409 | application/json |
| Models::Errors::PermissionsErrorResponse | 500 | application/json |
| Errors::APIError | 4XX, 5XX | */* |
Delete a specific custom role.
require 'cloudinary_account_provisioning'
Models = ::CldProvisioning::Models
s = ::CldProvisioning::CldProvisioning.new(
account_id: '<id>',
security: Models::Shared::Security.new(
provisioning_api_key: 'CLOUDINARY_PROVISIONING_API_KEY',
provisioning_api_secret: 'CLOUDINARY_PROVISIONING_API_SECRET'
)
)
res = s.roles.delete(role_id: '<id>')
| Parameter | Type | Required | Description |
|---|---|---|---|
role_id |
::String | ✔️ | A unique identifier for the role. |
account_id |
T.nilable(::String) | ➖ | Account ID |
force |
T.nilable(T::Boolean) | ➖ | Determines whether the role should be deleted when it has associated principals. - true: Deletes the role even if it has associated principals.- false (default): Prevents deletion if the role has associated principals. You must manually unassociate the principals before deleting the role. |
| Error Type | Status Code | Content Type |
|---|---|---|
| Models::Errors::PermissionsErrorResponse | 401, 403, 404 | application/json |
| Errors::APIError | 4XX, 5XX | */* |
Retrieve all principals associated with a specific role.
require 'cloudinary_account_provisioning'
Models = ::CldProvisioning::Models
s = ::CldProvisioning::CldProvisioning.new(
account_id: '<id>',
security: Models::Shared::Security.new(
provisioning_api_key: 'CLOUDINARY_PROVISIONING_API_KEY',
provisioning_api_secret: 'CLOUDINARY_PROVISIONING_API_SECRET'
)
)
req = Models::Operations::GetRolePrincipalsRequest.new(
role_id: '<id>',
scope_type: Models::Shared::ScopeTypeEnum::PRODENV,
param_key: [
'folder_id',
],
param_value: [
'asdfjkl12347890',
]
)
res = s.roles.list_principals(request: req)
unless res.nil?
# handle response
endrequire 'cloudinary_account_provisioning'
Models = ::CldProvisioning::Models
s = ::CldProvisioning::CldProvisioning.new(
account_id: '<id>',
security: Models::Shared::Security.new(
provisioning_api_key: 'CLOUDINARY_PROVISIONING_API_KEY',
provisioning_api_secret: 'CLOUDINARY_PROVISIONING_API_SECRET'
)
)
req = Models::Operations::GetRolePrincipalsRequest.new(
role_id: '<id>',
scope_type: Models::Shared::ScopeTypeEnum::PRODENV,
param_key: [
'folder_id',
],
param_value: [
'asdfjkl12347890',
]
)
res = s.roles.list_principals(request: req)
unless res.nil?
# handle response
end| Parameter | Type | Required | Description |
|---|---|---|---|
request |
Models::Operations::GetRolePrincipalsRequest | ✔️ | The request object to use for the request. |
T.nilable(Models::Shared::PrincipalsResponse)
| Error Type | Status Code | Content Type |
|---|---|---|
| Models::Errors::PermissionsErrorResponse | 401, 403, 404 | application/json |
| Errors::APIError | 4XX, 5XX | */* |
Add or remove principals associated with a role.
require 'cloudinary_account_provisioning'
Models = ::CldProvisioning::Models
s = ::CldProvisioning::CldProvisioning.new(
account_id: '<id>',
security: Models::Shared::Security.new(
provisioning_api_key: 'CLOUDINARY_PROVISIONING_API_KEY',
provisioning_api_secret: 'CLOUDINARY_PROVISIONING_API_SECRET'
)
)
res = s.roles.update_principals(role_id: '<id>', update_role_principals_request: Models::Shared::UpdateRolePrincipalsRequest.new(
operation: Models::Shared::OperationEnum::ADD,
principals: [
Models::Shared::UpdateRolePrincipal.new(
principal_type: Models::Shared::PrincipalTypeEnum::USER,
principal_id: '1234abc',
scope_id: '975l29lz02jt0836fhwi',
policy_parameters: Models::Shared::UpdateRolePrincipalPolicyParameters.new
),
]
))
require 'cloudinary_account_provisioning'
Models = ::CldProvisioning::Models
s = ::CldProvisioning::CldProvisioning.new(
account_id: '<id>',
security: Models::Shared::Security.new(
provisioning_api_key: 'CLOUDINARY_PROVISIONING_API_KEY',
provisioning_api_secret: 'CLOUDINARY_PROVISIONING_API_SECRET'
)
)
res = s.roles.update_principals(role_id: '<id>', update_role_principals_request: Models::Shared::UpdateRolePrincipalsRequest.new(
operation: Models::Shared::OperationEnum::ADD,
principals: [
Models::Shared::UpdateRolePrincipal.new(
principal_type: Models::Shared::PrincipalTypeEnum::USER,
principal_id: '1234abc',
scope_id: '975l29lz02jt0836fhwi',
policy_parameters: Models::Shared::UpdateRolePrincipalPolicyParameters.new
),
]
))
| Parameter | Type | Required | Description |
|---|---|---|---|
role_id |
::String | ✔️ | A unique identifier for the role. |
update_role_principals_request |
Models::Shared::UpdateRolePrincipalsRequest | ✔️ | Principals details. |
account_id |
T.nilable(::String) | ➖ | Account ID |
| Error Type | Status Code | Content Type |
|---|---|---|
| Models::Errors::PermissionsErrorResponse | 400, 401, 403, 404 | application/json |
| Errors::APIError | 4XX, 5XX | */* |