curl --request POST \
--url https://services.pref.rio/heimdall-admin/api/v1/roles/ \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"description": "Data analysts with read access to analytics dashboards",
"name": "data_analyst:read"
}
'import requests
url = "https://services.pref.rio/heimdall-admin/api/v1/roles/"
payload = {
"description": "Data analysts with read access to analytics dashboards",
"name": "data_analyst:read"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
description: 'Data analysts with read access to analytics dashboards',
name: 'data_analyst:read'
})
};
fetch('https://services.pref.rio/heimdall-admin/api/v1/roles/', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://services.pref.rio/heimdall-admin/api/v1/roles/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'description' => 'Data analysts with read access to analytics dashboards',
'name' => 'data_analyst:read'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://services.pref.rio/heimdall-admin/api/v1/roles/"
payload := strings.NewReader("{\n \"description\": \"Data analysts with read access to analytics dashboards\",\n \"name\": \"data_analyst:read\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://services.pref.rio/heimdall-admin/api/v1/roles/")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"description\": \"Data analysts with read access to analytics dashboards\",\n \"name\": \"data_analyst:read\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://services.pref.rio/heimdall-admin/api/v1/roles/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"description\": \"Data analysts with read access to analytics dashboards\",\n \"name\": \"data_analyst:read\"\n}"
response = http.request(request)
puts response.read_body{
"created_at": "2024-01-15T10:30:00Z",
"created_by": "12345678901",
"description": "Data analysts with read access to analytics dashboards",
"id": 1,
"name": "data_analyst:read"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}Create Role
Create a role (admin-only). Implements POST /roles as specified in SPEC.md Section 3.4.
curl --request POST \
--url https://services.pref.rio/heimdall-admin/api/v1/roles/ \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"description": "Data analysts with read access to analytics dashboards",
"name": "data_analyst:read"
}
'import requests
url = "https://services.pref.rio/heimdall-admin/api/v1/roles/"
payload = {
"description": "Data analysts with read access to analytics dashboards",
"name": "data_analyst:read"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
description: 'Data analysts with read access to analytics dashboards',
name: 'data_analyst:read'
})
};
fetch('https://services.pref.rio/heimdall-admin/api/v1/roles/', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://services.pref.rio/heimdall-admin/api/v1/roles/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'description' => 'Data analysts with read access to analytics dashboards',
'name' => 'data_analyst:read'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://services.pref.rio/heimdall-admin/api/v1/roles/"
payload := strings.NewReader("{\n \"description\": \"Data analysts with read access to analytics dashboards\",\n \"name\": \"data_analyst:read\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://services.pref.rio/heimdall-admin/api/v1/roles/")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"description\": \"Data analysts with read access to analytics dashboards\",\n \"name\": \"data_analyst:read\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://services.pref.rio/heimdall-admin/api/v1/roles/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"description\": \"Data analysts with read access to analytics dashboards\",\n \"name\": \"data_analyst:read\"\n}"
response = http.request(request)
puts response.read_body{
"created_at": "2024-01-15T10:30:00Z",
"created_by": "12345678901",
"description": "Data analysts with read access to analytics dashboards",
"id": 1,
"name": "data_analyst:read"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
Request model for creating a new role.
Unique name for the role (lowercase letters, numbers, underscores, and colons only)
1 - 100^[a-z0-9_:]+$"data_analyst:read"
Human-readable description of the role's purpose and permissions
1 - 500"Data analysts with read access to analytics dashboards"
Response
Successful Response
Response model for role information.
Unique identifier for the role
1
Role name
"data_analyst:read"
Role description
"Data analysts with read access to analytics dashboards"
CPF of the user who created this role (null for system roles)
"12345678901"
ISO timestamp when the role was created (null for system roles)
"2024-01-15T10:30:00Z"
