Role service (gRPC)#
RoleService provides methods for managing roles within Nominal.
Endpoints#
Batch get resource roles#
gRPC /nominal.authorization.roles.v1.RoleService/BatchGetResourceRoles
Gets the role assignments for multiple resources.
Request: BatchGetResourceRolesRequest
resourcesarray of string
Response: BatchGetResourceRolesResponse
role_assignments_by_resourcemap of string toRoleAssignmentWrapper
Fields of
RoleAssignmentWrapperrole_assignmentsarray ofRoleAssignmentResponse
Fields of
RoleAssignmentResponseroleRole
Values of
RoleROLE_UNSPECIFIEDDefault value, should not be used.
ROLE_OWNER
user_ridstring
Request
import grpc
from nominal.protos.authorization.roles.v1 import roles_pb2, roles_pb2_grpc
channel = grpc.secure_channel("api.gov.nominal.io:443", grpc.ssl_channel_credentials())
role_service = roles_pb2_grpc.RoleServiceStub(channel)
auth = [("authorization", "Bearer <api key>")]
request = roles_pb2.BatchGetResourceRolesRequest(resources=["<resources>"])
response = role_service.BatchGetResourceRoles(request, metadata=auth)
print(response)
package main
import (
"context"
"crypto/tls"
"fmt"
"log"
rolesv1 "github.com/nominal-io/nominal-api-protos-go/nominal/protos/authorization/roles/v1"
"google.golang.org/grpc"
"google.golang.org/grpc/credentials"
"google.golang.org/grpc/metadata"
)
func main() {
conn, err := grpc.NewClient("api.gov.nominal.io:443",
grpc.WithTransportCredentials(credentials.NewTLS(&tls.Config{})))
if err != nil {
log.Fatal(err)
}
defer conn.Close()
roleService := rolesv1.NewRoleServiceClient(conn)
ctx := metadata.AppendToOutgoingContext(context.Background(), "authorization", "Bearer <api key>")
request := &rolesv1.BatchGetResourceRolesRequest{
Resources: []string{
"<resources>",
},
}
response, err := roleService.BatchGetResourceRoles(ctx, request)
if err != nil {
log.Fatal(err)
}
fmt.Println(response)
}
Response
{
"role_assignments_by_resource": {
"<key>": {
"role_assignments": [
{
"role": "ROLE_OWNER",
"user_rid": "<user rid>"
}
]
}
}
}
Get resource roles#
gRPC /nominal.authorization.roles.v1.RoleService/GetResourceRoles
Gets the role assignments for a resource.
Request: GetResourceRolesRequest
resourcestring
Response: GetResourceRolesResponse
role_assignmentsarray ofRoleAssignmentResponse
Fields of
RoleAssignmentResponseroleRole
Values of
RoleROLE_UNSPECIFIEDDefault value, should not be used.
ROLE_OWNER
user_ridstring
Request
import grpc
from nominal.protos.authorization.roles.v1 import roles_pb2, roles_pb2_grpc
channel = grpc.secure_channel("api.gov.nominal.io:443", grpc.ssl_channel_credentials())
role_service = roles_pb2_grpc.RoleServiceStub(channel)
auth = [("authorization", "Bearer <api key>")]
request = roles_pb2.GetResourceRolesRequest(resource="<resource>")
response = role_service.GetResourceRoles(request, metadata=auth)
print(response)
package main
import (
"context"
"crypto/tls"
"fmt"
"log"
rolesv1 "github.com/nominal-io/nominal-api-protos-go/nominal/protos/authorization/roles/v1"
"google.golang.org/grpc"
"google.golang.org/grpc/credentials"
"google.golang.org/grpc/metadata"
)
func main() {
conn, err := grpc.NewClient("api.gov.nominal.io:443",
grpc.WithTransportCredentials(credentials.NewTLS(&tls.Config{})))
if err != nil {
log.Fatal(err)
}
defer conn.Close()
roleService := rolesv1.NewRoleServiceClient(conn)
ctx := metadata.AppendToOutgoingContext(context.Background(), "authorization", "Bearer <api key>")
request := &rolesv1.GetResourceRolesRequest{
Resource: "<resource>",
}
response, err := roleService.GetResourceRoles(ctx, request)
if err != nil {
log.Fatal(err)
}
fmt.Println(response)
}
Response
{
"role_assignments": [
{
"role": "ROLE_OWNER",
"user_rid": "<user rid>"
}
]
}
Update resource roles#
gRPC /nominal.authorization.roles.v1.RoleService/UpdateResourceRoles
Atomically adds and removes role assignments for a resource. Throws if the same role assignment is both added and removed in the same request.
Request: UpdateResourceRolesRequest
resourcestring
assignments_to_addarray ofRoleAssignmentRequest
Fields of
RoleAssignmentRequestroleRole
Values of
RoleROLE_UNSPECIFIEDDefault value, should not be used.
ROLE_OWNER
user_ridstring
assignments_to_removearray ofRoleAssignmentRequest
Response: UpdateResourceRolesResponse
A message with no fields.
Request
import grpc
from nominal.protos.authorization.roles.v1 import roles_pb2, roles_pb2_grpc
channel = grpc.secure_channel("api.gov.nominal.io:443", grpc.ssl_channel_credentials())
role_service = roles_pb2_grpc.RoleServiceStub(channel)
auth = [("authorization", "Bearer <api key>")]
request = roles_pb2.UpdateResourceRolesRequest(
resource="<resource>",
assignments_to_add=[{"role": "ROLE_OWNER", "user_rid": "<user rid>"}],
assignments_to_remove=[{"role": "ROLE_OWNER", "user_rid": "<user rid>"}],
)
response = role_service.UpdateResourceRoles(request, metadata=auth)
print(response)
package main
import (
"context"
"crypto/tls"
"fmt"
"log"
rolesv1 "github.com/nominal-io/nominal-api-protos-go/nominal/protos/authorization/roles/v1"
"google.golang.org/grpc"
"google.golang.org/grpc/credentials"
"google.golang.org/grpc/metadata"
)
func main() {
conn, err := grpc.NewClient("api.gov.nominal.io:443",
grpc.WithTransportCredentials(credentials.NewTLS(&tls.Config{})))
if err != nil {
log.Fatal(err)
}
defer conn.Close()
roleService := rolesv1.NewRoleServiceClient(conn)
ctx := metadata.AppendToOutgoingContext(context.Background(), "authorization", "Bearer <api key>")
request := &rolesv1.UpdateResourceRolesRequest{
Resource: "<resource>",
AssignmentsToAdd: []*rolesv1.RoleAssignmentRequest{
{
Role: rolesv1.Role_ROLE_OWNER,
Assignee: &rolesv1.RoleAssignmentRequest_UserRid{UserRid: "<user rid>"},
},
},
AssignmentsToRemove: []*rolesv1.RoleAssignmentRequest{
{
Role: rolesv1.Role_ROLE_OWNER,
Assignee: &rolesv1.RoleAssignmentRequest_UserRid{UserRid: "<user rid>"},
},
},
}
response, err := roleService.UpdateResourceRoles(ctx, request)
if err != nil {
log.Fatal(err)
}
fmt.Println(response)
}
Response
{}
Types#
Role#
ROLE_UNSPECIFIEDDefault value, should not be used.
ROLE_OWNER
RoleAssignmentRequest#
roleRole
user_ridstring
RoleAssignmentResponse#
roleRole
user_ridstring
RoleAssignmentWrapper#
role_assignmentsarray ofRoleAssignmentResponse
Page design based on Scalar, MIT License.