mirror of
https://github.com/zitadel/zitadel.git
synced 2025-08-25 20:37:49 +00:00
initial design
This commit is contained in:
104
proto/zitadel/authorizations/v2/authorization.proto
Normal file
104
proto/zitadel/authorizations/v2/authorization.proto
Normal file
@@ -0,0 +1,104 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
package zitadel.authorizations.v2;
|
||||||
|
|
||||||
|
import "validate/validate.proto";
|
||||||
|
import "zitadel/object/v2/object.proto";
|
||||||
|
|
||||||
|
message AuthorizationQuery {
|
||||||
|
oneof query {
|
||||||
|
option (validate.required) = true;
|
||||||
|
|
||||||
|
// Search for authorizations by their ID.
|
||||||
|
AuthorizationIDQuery authorization_id_query = 1;
|
||||||
|
// Search for authorizations by the ID of the user who was granted the authorization.
|
||||||
|
UserIDQuery user_id_query = 2;
|
||||||
|
// Search for authorizations by the ID of the organisation the user is part of.
|
||||||
|
UserOrganizationIDQuery user_organization_id_query = 3;
|
||||||
|
// Search for authorizations by the ID of the project the user was granted the authorization for.
|
||||||
|
ProjectIDQuery project_id_query = 4;
|
||||||
|
// Search for authorizations by the ID of the project grant the user was granted the authorization for.
|
||||||
|
ProjectGrantIDQuery project_grant_id_query = 5;
|
||||||
|
// Search for authorizations by the key of the role the user was granted.
|
||||||
|
RoleKeyQuery role_key_query = 6;
|
||||||
|
|
||||||
|
// UserGrantProjectIDQuery project_id_query = 1;
|
||||||
|
// UserGrantUserIDQuery user_id_query = 2;
|
||||||
|
// UserGrantWithGrantedQuery with_granted_query = 3;
|
||||||
|
// UserGrantRoleKeyQuery role_key_query = 4;
|
||||||
|
// UserGrantProjectGrantIDQuery project_grant_id_query = 5;
|
||||||
|
// UserGrantUserNameQuery user_name_query = 6;
|
||||||
|
// UserGrantFirstNameQuery first_name_query = 7;
|
||||||
|
// UserGrantLastNameQuery last_name_query = 8;
|
||||||
|
// UserGrantEmailQuery email_query = 9;
|
||||||
|
// UserGrantOrgNameQuery org_name_query = 10;
|
||||||
|
// UserGrantOrgDomainQuery org_domain_query = 11;
|
||||||
|
// UserGrantProjectNameQuery project_name_query = 12;
|
||||||
|
// UserGrantDisplayNameQuery display_name_query = 13;
|
||||||
|
// UserGrantUserTypeQuery user_type_query = 14;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
message AuthorizationIDQuery {
|
||||||
|
string id = 1 [(validate.rules).string = {
|
||||||
|
min_len: 1
|
||||||
|
max_len: 200
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
|
||||||
|
message UserIDQuery {
|
||||||
|
string user_id = 1 [(validate.rules).string = {
|
||||||
|
min_len: 1
|
||||||
|
max_len: 200
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
|
||||||
|
message UserOrganizationIDQuery {
|
||||||
|
string user_organization_id = 1 [(validate.rules).string = {
|
||||||
|
min_len: 1
|
||||||
|
max_len: 200
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
|
||||||
|
message ProjectIDQuery {
|
||||||
|
string project_id = 1 [(validate.rules).string = {
|
||||||
|
min_len: 1
|
||||||
|
max_len: 200
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
|
||||||
|
message ProjectGrantIDQuery {
|
||||||
|
string project_grant_id = 1 [(validate.rules).string = {
|
||||||
|
min_len: 1
|
||||||
|
max_len: 200
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
|
||||||
|
message RoleKeyQuery {
|
||||||
|
string role_key = 1 [(validate.rules).string = {max_len: 200}];
|
||||||
|
zitadel.object.v2.TextQueryMethod method = 2 [(validate.rules).enum.defined_only = true];
|
||||||
|
}
|
||||||
|
|
||||||
|
message Authorization {
|
||||||
|
// ID is the unique identifier of the authorization.
|
||||||
|
string id = 1;
|
||||||
|
// UserID represents the ID of the user who was granted the authorization.
|
||||||
|
string user_id = 2;
|
||||||
|
// UserOrganisationID represents the ID of the organisation the user is part of.
|
||||||
|
string user_organization_id = 3;
|
||||||
|
// ProjectID represents the ID of the project the user was granted the authorization for.
|
||||||
|
string project_id = 4;
|
||||||
|
// ProjectGrantID represents the ID of the project grant the user was granted the authorization for.
|
||||||
|
// This field is only set if the authorization was granted for a project grant and not a project directly.
|
||||||
|
string project_grant_id = 5;
|
||||||
|
|
||||||
|
// Roles contains the roles the user was granted for the project or project grant.
|
||||||
|
repeated Role roles = 6;
|
||||||
|
}
|
||||||
|
|
||||||
|
message Role {
|
||||||
|
// Key is the unique identifier of the role.
|
||||||
|
string key = 1;
|
||||||
|
// DisplayName is the human readable name of the role.
|
||||||
|
string display_name = 2;
|
||||||
|
}
|
156
proto/zitadel/authorizations/v2/authorization_service.proto
Normal file
156
proto/zitadel/authorizations/v2/authorization_service.proto
Normal file
@@ -0,0 +1,156 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
package zitadel.authorizations.v2;
|
||||||
|
|
||||||
|
import "google/protobuf/timestamp.proto";
|
||||||
|
import "validate/validate.proto";
|
||||||
|
import "zitadel/object/v2/object.proto";
|
||||||
|
import "zitadel/authorizations/v2/authorization.proto";
|
||||||
|
|
||||||
|
// AuthorizationService provides methods to manage authorizations for users within your projects and applications.
|
||||||
|
//
|
||||||
|
// For managing permissions and roles for ZITADEL internal resources, like organizations, projects,
|
||||||
|
// users, etc., please use the PermissionsService.
|
||||||
|
service AuthorizationsService {
|
||||||
|
// ListAuthorizations returns all authorizations matching the request and necessary permissions.
|
||||||
|
//
|
||||||
|
// Required permissions:
|
||||||
|
// - "user.grant.read"
|
||||||
|
// - no permissions required for listing own authorizations
|
||||||
|
rpc ListAuthorizations(ListAuthorizationsRequest) returns (ListAuthorizationsResponse) {}
|
||||||
|
|
||||||
|
// GetAuthorization returns the authorization by its ID.
|
||||||
|
//
|
||||||
|
// Required permissions:
|
||||||
|
// - "user.grant.read"
|
||||||
|
// - no permissions required for getting own authorization
|
||||||
|
rpc GetAuthorization(GetAuthorizationRequest) returns (GetAuthorizationResponse) {}
|
||||||
|
|
||||||
|
// CreateAuthorization creates a new authorization for a user in a project or project grant.
|
||||||
|
//
|
||||||
|
// Required permissions:
|
||||||
|
// - "user.grant.write"
|
||||||
|
rpc CreateAuthorization(CreateAuthorizationRequest) returns (CreateAuthorizationResponse) {}
|
||||||
|
|
||||||
|
// UpdateAuthorization updates the authorization.
|
||||||
|
//
|
||||||
|
// Note that any role keys previously granted to the user and not present in the request will be revoked.
|
||||||
|
//
|
||||||
|
// Required permissions:
|
||||||
|
// - "user.grant.write"
|
||||||
|
rpc UpdateAuthorization(UpdateAuthorizationRequest) returns (UpdateAuthorizationResponse) {}
|
||||||
|
|
||||||
|
// DeleteAuthorization deletes the authorization.
|
||||||
|
//
|
||||||
|
// In case the authorization is not found, the request will return a successful response as
|
||||||
|
// the desired state is already achieved.
|
||||||
|
// You can check the deletion date in the response to verify if the authorization was deleted during the request.
|
||||||
|
//
|
||||||
|
// Required permissions:
|
||||||
|
// - "user.grant.delete"
|
||||||
|
rpc DeleteAuthorization(DeleteAuthorizationRequest) returns (DeleteAuthorizationResponse) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
message ListAuthorizationsRequest {
|
||||||
|
// Paginate through the results using a limit.
|
||||||
|
zitadel.object.v2.ListQuery query = 1;
|
||||||
|
// Filter the authorizations to be returned.
|
||||||
|
repeated AuthorizationQuery queries = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
message ListAuthorizationsResponse {
|
||||||
|
// Details contains the pagination information.
|
||||||
|
zitadel.object.v2.ListDetails details = 1;
|
||||||
|
repeated Authorization authorizations = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
message GetAuthorizationRequest {
|
||||||
|
// ID is the unique identifier of the authorization.
|
||||||
|
string id = 1 [(validate.rules).string = {
|
||||||
|
min_len: 1
|
||||||
|
max_len: 200
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
|
||||||
|
message GetAuthorizationResponse {
|
||||||
|
Authorization authorization = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message CreateAuthorizationRequest {
|
||||||
|
// UserID is the ID of the user who should be granted the authorization.
|
||||||
|
string user_id = 1 [(validate.rules).string = {
|
||||||
|
min_len: 1
|
||||||
|
max_len: 200
|
||||||
|
}];
|
||||||
|
// Grant on either the project directly or on a project grant.
|
||||||
|
oneof grant {
|
||||||
|
option (validate.required) = true;
|
||||||
|
|
||||||
|
// Project is the ID of the project the user should be granted the authorization for.
|
||||||
|
string project_id = 2 [(validate.rules).string = {
|
||||||
|
min_len: 1
|
||||||
|
max_len: 200
|
||||||
|
}];
|
||||||
|
// ProjectGrant is the ID of the project grant the user should be granted the authorization for.
|
||||||
|
string project_grant_id = 3 [(validate.rules).string = {
|
||||||
|
min_len: 1
|
||||||
|
max_len: 200
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
// RoleKeys are the keys of the roles the user should be granted.
|
||||||
|
repeated string role_keys = 4 [(validate.rules).repeated = {
|
||||||
|
unique: true
|
||||||
|
items: {
|
||||||
|
string: {
|
||||||
|
min_len: 1
|
||||||
|
max_len: 200
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
|
||||||
|
message CreateAuthorizationResponse {
|
||||||
|
// ID is the unique identifier of the newly created authorization.
|
||||||
|
string id = 1;
|
||||||
|
// CreationDate is the timestamp when the authorization was created.
|
||||||
|
google.protobuf.Timestamp creation_date = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
message UpdateAuthorizationRequest {
|
||||||
|
// ID is the unique identifier of the authorization.
|
||||||
|
string id = 1 [(validate.rules).string = {
|
||||||
|
min_len: 1
|
||||||
|
max_len: 200
|
||||||
|
}];
|
||||||
|
// RoleKeys are the keys of the roles the user should be granted.
|
||||||
|
// Note that any role keys previously granted to the user and not present in the list will be revoked.
|
||||||
|
repeated string role_keys = 2 [(validate.rules).repeated = {
|
||||||
|
unique: true
|
||||||
|
items: {
|
||||||
|
string: {
|
||||||
|
min_len: 1
|
||||||
|
max_len: 200
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
|
||||||
|
message UpdateAuthorizationResponse {
|
||||||
|
// ChangeDate is the timestamp when the authorization was last updated.
|
||||||
|
google.protobuf.Timestamp change_date = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message DeleteAuthorizationRequest {
|
||||||
|
// ID is the unique identifier of the authorization.
|
||||||
|
string id = 1 [(validate.rules).string = {
|
||||||
|
min_len: 1
|
||||||
|
max_len: 200
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
|
||||||
|
message DeleteAuthorizationResponse {
|
||||||
|
// DeletionDate is the timestamp when the authorization was deleted.
|
||||||
|
// Note that the deletion date is only guaranteed to be set if the deletion was successful during the request.
|
||||||
|
// In case the deletion occurred in a previous request, the deletion date might not be set.
|
||||||
|
google.protobuf.Timestamp deletion_date = 1;
|
||||||
|
}
|
30
proto/zitadel/metadata/v2/metadata.proto
Normal file
30
proto/zitadel/metadata/v2/metadata.proto
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
import "zitadel/object.proto";
|
||||||
|
import "validate/validate.proto";
|
||||||
|
|
||||||
|
package zitadel.metadata.v2;
|
||||||
|
|
||||||
|
option go_package ="github.com/zitadel/zitadel/pkg/grpc/metadata/v2";
|
||||||
|
|
||||||
|
message Metadata {
|
||||||
|
//zitadel.v1.ObjectDetails details = 1; TODO?
|
||||||
|
string key = 2;
|
||||||
|
bytes value = 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
message MetadataQuery {
|
||||||
|
oneof query {
|
||||||
|
option (validate.required) = true;
|
||||||
|
MetadataKeyQuery key_query = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
message MetadataKeyQuery {
|
||||||
|
string key = 1 [
|
||||||
|
(validate.rules).string = {max_len: 200}
|
||||||
|
];
|
||||||
|
zitadel.v1.TextQueryMethod method = 2 [
|
||||||
|
(validate.rules).enum.defined_only = true
|
||||||
|
];
|
||||||
|
}
|
214
proto/zitadel/permissions/v2/manager.proto
Normal file
214
proto/zitadel/permissions/v2/manager.proto
Normal file
@@ -0,0 +1,214 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
import "validate/validate.proto";
|
||||||
|
import "zitadel/object/v2/object.proto";
|
||||||
|
|
||||||
|
package zitadel.permissions.v2;
|
||||||
|
|
||||||
|
/*
|
||||||
|
message Manager2 {
|
||||||
|
// ID is the unique identifier of the manager role.
|
||||||
|
string id = 1;
|
||||||
|
// UserID is the ID of the user who was granted the manager role.
|
||||||
|
oneof user {
|
||||||
|
string user_id = 2;
|
||||||
|
User expanded = 3;
|
||||||
|
}
|
||||||
|
repeated string roles = 4;
|
||||||
|
|
||||||
|
|
||||||
|
oneof managerType {
|
||||||
|
// InstanceManager is the manager role for the instance.
|
||||||
|
InstanceManager instance_manager = 3;
|
||||||
|
// OrganizationManager is the manager role for the organization.
|
||||||
|
OrganizationManager organization_manager = 4;
|
||||||
|
// ProjectManager is the manager role for the project.
|
||||||
|
ProjectManager project_manager = 5;
|
||||||
|
// ProjectGrantManager is the manager role for the project grant.
|
||||||
|
ProjectGrantManager project_grant_manager = 6;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
message Manager {
|
||||||
|
|
||||||
|
// ID is the unique identifier of the manager role.
|
||||||
|
string id = 1;
|
||||||
|
// User is the user who was granted the manager role.
|
||||||
|
User user = 2;
|
||||||
|
// string user_id = 3;
|
||||||
|
// string user_preferred_login_name = 4;
|
||||||
|
// string user_display_name = 5;
|
||||||
|
// string user_avatar_url = 6;
|
||||||
|
// string user_organization_id = 7;
|
||||||
|
// Resource is the type of the resource the manager roles were granted for.
|
||||||
|
oneof resource {
|
||||||
|
// Instance is returned if the manager roles were granted on the instance level.
|
||||||
|
bool instance = 3;
|
||||||
|
// Organization provides information about the organization the manager roles were granted for.
|
||||||
|
Organization organization = 4;
|
||||||
|
// Project provides information about the project the manager roles were granted for.
|
||||||
|
Project project = 5;
|
||||||
|
// ProjectGrant provides information about the project grant the manager roles were granted for.
|
||||||
|
ProjectGrant project_grant = 6;
|
||||||
|
}
|
||||||
|
// Roles are the roles that were granted to the user for the specified resource.
|
||||||
|
repeated string roles = 7;
|
||||||
|
}
|
||||||
|
|
||||||
|
message User {
|
||||||
|
// ID is the unique identifier of the user.
|
||||||
|
string id = 1;
|
||||||
|
// PreferredLoginName is the preferred login name of the user. This value is unique across the whole instance..
|
||||||
|
string preferred_login_name = 2;
|
||||||
|
// DisplayName is the public display name of the user.
|
||||||
|
// By default it's the user's given name and family name, their username or their email address.
|
||||||
|
string display_name = 3;
|
||||||
|
// AvatarURL is the URL to the user's public avatar image.
|
||||||
|
string avatar_url = 4;
|
||||||
|
// The organization the user belong to.
|
||||||
|
string organization_id = 5;
|
||||||
|
|
||||||
|
// zitadel.user.v1.Type user_type = 10 TODO: peintner?
|
||||||
|
}
|
||||||
|
|
||||||
|
message Organization {
|
||||||
|
// ID is the unique identifier of the organization the user was granted the manager role for.
|
||||||
|
string id = 1;
|
||||||
|
// Name is the name of the organization the user was granted the manager role for.
|
||||||
|
string name = 2;
|
||||||
|
}
|
||||||
|
message Project {
|
||||||
|
// ID is the unique identifier of the project the user was granted the manager role for.
|
||||||
|
string id = 1;
|
||||||
|
// Name is the name of the project the user was granted the manager role for.
|
||||||
|
string name = 2;
|
||||||
|
// OrganizationID is the ID of the organization the project belongs to.
|
||||||
|
string organization_id = 3;
|
||||||
|
}
|
||||||
|
message ProjectGrant {
|
||||||
|
// ID is the unique identifier of the project grant the user was granted the manager role for.
|
||||||
|
string id = 1;
|
||||||
|
// ProjectID is the ID of the project the project grant belongs to.
|
||||||
|
string project_id = 2;
|
||||||
|
// ProjectName is the name of the project the project grant belongs to.
|
||||||
|
string project_name = 3;
|
||||||
|
// OrganizationID is the ID of the organization the project grant belongs to.
|
||||||
|
string organization_id = 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
message SetInstanceManager {
|
||||||
|
// Roles are the roles that should be granted to the user.
|
||||||
|
repeated string roles = 1 [(validate.rules).repeated = {
|
||||||
|
unique: true
|
||||||
|
items: {
|
||||||
|
string: {
|
||||||
|
min_len: 1
|
||||||
|
max_len: 200
|
||||||
|
prefix: "IAM_" // TODO: do we want to limit here as well?
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
|
||||||
|
message SetOrganizationManager {
|
||||||
|
// OrganizationID is the ID of the organization the user should be granted the manager role for.
|
||||||
|
string organization_id = 1 [(validate.rules).string = {
|
||||||
|
min_len: 1
|
||||||
|
max_len: 200
|
||||||
|
}];
|
||||||
|
// Roles are the roles that should be granted to the user within the specified organization.
|
||||||
|
repeated string roles = 2 [(validate.rules).repeated = {
|
||||||
|
unique: true
|
||||||
|
items: {
|
||||||
|
string: {
|
||||||
|
min_len: 1
|
||||||
|
max_len: 200
|
||||||
|
prefix: "ORG_" // TODO: do we want to limit here as well?
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
|
||||||
|
message SetProjectManager {
|
||||||
|
// ProjectID is the ID of the project the user should be granted the manager role for.
|
||||||
|
string project_id = 1 [(validate.rules).string = {
|
||||||
|
min_len: 1
|
||||||
|
max_len: 200
|
||||||
|
}];
|
||||||
|
// Roles are the roles that should be granted to the user within the specified project.
|
||||||
|
repeated string roles = 2 [(validate.rules).repeated = {
|
||||||
|
unique: true
|
||||||
|
items: {
|
||||||
|
string: {
|
||||||
|
min_len: 1
|
||||||
|
max_len: 200
|
||||||
|
prefix: "PROJECT_" // TODO: do we want to limit here as well?
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
|
||||||
|
message SetProjectGrantManager {
|
||||||
|
// ProjectGrantID is the ID of the project grant the user should be granted the manager role for.
|
||||||
|
string project_grant_id = 1 [(validate.rules).string = {
|
||||||
|
min_len: 1
|
||||||
|
max_len: 200
|
||||||
|
}];
|
||||||
|
// Roles are the roles that should be granted to the user within the specified project grant.
|
||||||
|
repeated string roles = 2 [(validate.rules).repeated = {
|
||||||
|
unique: true
|
||||||
|
items: {
|
||||||
|
string: {
|
||||||
|
min_len: 1
|
||||||
|
max_len: 200
|
||||||
|
prefix: "PROJECT_GRANT_" // TODO: do we want to limit here as well?
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
message ManagerQuery {
|
||||||
|
oneof query {
|
||||||
|
option (validate.required) = true;
|
||||||
|
|
||||||
|
// Search for managers roles granted to a specific user.
|
||||||
|
UserIDQuery user_id_query = 1;
|
||||||
|
// Search for managers roles granted for a specific resource.
|
||||||
|
ResourceQuery resource_query = 2;
|
||||||
|
// Search for managers roles granted with a specific role.
|
||||||
|
RoleQuery role_query = 3;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
message UserIDQuery {
|
||||||
|
// Search for managers by user ID.
|
||||||
|
string user_id = 1 [(validate.rules).string = {
|
||||||
|
min_len: 1
|
||||||
|
max_len: 200
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
|
||||||
|
message ResourceQuery {
|
||||||
|
// Search for managers by the granted resource.
|
||||||
|
oneof resource {
|
||||||
|
// Search for managers granted on the instance level.
|
||||||
|
bool instance = 1;
|
||||||
|
// Search for managers granted on a specific organization.
|
||||||
|
string organization_id = 2;
|
||||||
|
// Search for managers granted on a specific project.
|
||||||
|
string project_id = 3;
|
||||||
|
// Search for managers granted on a specific project grant.
|
||||||
|
string project_grant_id = 4;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
message RoleQuery {
|
||||||
|
// Search for managers by the granted role.
|
||||||
|
string role_key = 1 [(validate.rules).string = {
|
||||||
|
min_len: 1
|
||||||
|
max_len: 200
|
||||||
|
}];
|
||||||
|
}
|
189
proto/zitadel/permissions/v2/permission_service.proto
Normal file
189
proto/zitadel/permissions/v2/permission_service.proto
Normal file
@@ -0,0 +1,189 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
package zitadel.permissions.v2;
|
||||||
|
|
||||||
|
import "google/protobuf/timestamp.proto";
|
||||||
|
import "validate/validate.proto";
|
||||||
|
import "zitadel/object/v2/object.proto";
|
||||||
|
import "zitadel/permissions/v2/manager.proto";
|
||||||
|
|
||||||
|
// PermissionsService provides methods to manage permissions for resource
|
||||||
|
// and their management in ZITADEL itself.
|
||||||
|
//
|
||||||
|
// If you want to manage permissions and roles within your project or application,
|
||||||
|
// please use the AuthorizationsService.
|
||||||
|
service PermissionsService {
|
||||||
|
// ListManagers returns all managers and its roles matching the request and necessary permissions.
|
||||||
|
//
|
||||||
|
// Required permissions depend on the resource type:
|
||||||
|
// - "iam.member.read" for instance managers
|
||||||
|
// - "org.member.read" for organization managers
|
||||||
|
// - "project.member.read" for project managers
|
||||||
|
// - "project.grant.member.read" for project grant managers
|
||||||
|
// - "user.membership.read" TODO: only this required?
|
||||||
|
// - no permissions required for listing own manager roles
|
||||||
|
rpc ListManagers(ListManagersRequest) returns (ListManagersResponse) {}
|
||||||
|
// GetManager returns the manager role by its ID.
|
||||||
|
//
|
||||||
|
// Required permissions depend on the resource type:
|
||||||
|
// - "iam.member.read" for instance managers
|
||||||
|
// - "org.member.read" for organization managers
|
||||||
|
// - "project.member.read" for project managers
|
||||||
|
// - "project.grant.member.read" for project grant managers
|
||||||
|
// - "user.membership.read" TODO: only this required?
|
||||||
|
// - no permissions required for getting own manager roles
|
||||||
|
rpc GetManager(GetManagerRequest) returns (GetManagerResponse) {}
|
||||||
|
// CreateManager grants a manager role to a user.
|
||||||
|
//
|
||||||
|
// Required permissions depend on the resource type:
|
||||||
|
// - "iam.member.write" for instance managers
|
||||||
|
// - "org.member.write" for organization managers
|
||||||
|
// - "project.member.write" for project managers
|
||||||
|
// - "project.grant.member.write" for project grant managers
|
||||||
|
rpc CreateManager(CreateManagerRequest) returns (CreateManagerResponse) {}
|
||||||
|
// UpdateManager updates the manager role.
|
||||||
|
//
|
||||||
|
// Note that any role previously granted to the user and not present in the request will be revoked.
|
||||||
|
//
|
||||||
|
// Required permissions depend on the resource type:
|
||||||
|
// - "iam.member.write" for instance managers
|
||||||
|
// - "org.member.write" for organization managers
|
||||||
|
// - "project.member.write" for project managers
|
||||||
|
// - "project.grant.member.write" for project grant managers
|
||||||
|
rpc UpdateManager(UpdateManagerRequest) returns (UpdateManagerResponse) {}
|
||||||
|
// DeleteManager revokes a manager role from a user.
|
||||||
|
//
|
||||||
|
// Note that the deletion is only guaranteed to be successful if the user has the required permissions.
|
||||||
|
//
|
||||||
|
// Required permissions depend on the resource type:
|
||||||
|
// - "iam.member.delete" for instance managers
|
||||||
|
// - "org.member.delete" for organization managers
|
||||||
|
// - "project.member.delete" for project managers
|
||||||
|
// - "project.grant.member.delete" for project grant managers
|
||||||
|
rpc DeleteManager(DeleteManagerRequest) returns (DeleteManagerResponse) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
message ListManagersRequest {
|
||||||
|
// Paginate through the results using a limit.
|
||||||
|
zitadel.object.v2.ListQuery query = 1;
|
||||||
|
// Filter the manager roles to be returned.
|
||||||
|
repeated ManagerQuery queries = 2;
|
||||||
|
repeated Expand expand = 3; // TODO: ?
|
||||||
|
}
|
||||||
|
|
||||||
|
enum Expand {
|
||||||
|
EXPAND_UNSPECIFIED = 0;
|
||||||
|
EXPAND_USER = 1;
|
||||||
|
EXPAND_RESOURCE = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
message ListManagersResponse {
|
||||||
|
// Details contains the pagination information.
|
||||||
|
zitadel.object.v2.ListDetails details = 1;
|
||||||
|
repeated Manager managers = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
message GetManagerRequest {
|
||||||
|
// ID is the unique identifier of the manager.
|
||||||
|
string id = 1 [(validate.rules).string = {
|
||||||
|
min_len: 1
|
||||||
|
max_len: 200
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
|
||||||
|
message GetManagerResponse {
|
||||||
|
Manager manager = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
message CreateManagerRequest {
|
||||||
|
// UserID is the ID of the user who should be granted the manager role.
|
||||||
|
string user_id = 1 [(validate.rules).string = {
|
||||||
|
min_len: 1
|
||||||
|
max_len: 200
|
||||||
|
}];
|
||||||
|
oneof managerType {
|
||||||
|
SetInstanceManager instance_manager = 2;
|
||||||
|
SetOrganizationManager organization_manager = 3;
|
||||||
|
SetProjectManager project_manager = 4;
|
||||||
|
SetProjectGrantManager project_grant_manager = 5;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
message CreateManagerRequest {
|
||||||
|
// UserID is the ID of the user who should be granted the manager role.
|
||||||
|
string user_id = 1 [(validate.rules).string = {
|
||||||
|
min_len: 1
|
||||||
|
max_len: 200
|
||||||
|
}];
|
||||||
|
// Resource is the type of the resource the manager roles should be granted for.
|
||||||
|
oneof resource {
|
||||||
|
option (validate.required) = true;
|
||||||
|
|
||||||
|
// Instance is the resource type for granting manager privileges on the instance level.
|
||||||
|
bool instance = 2 [(validate.rules).bool = {const: true}];
|
||||||
|
// OrganizationID is required to grant manager privileges for a specific organization.
|
||||||
|
string organization_id = 3;
|
||||||
|
// ProjectID is required to grant manager privileges for a specific project.
|
||||||
|
string project_id = 4;
|
||||||
|
// ProjectGrantID is required to grant manager privileges for a specific project grant.
|
||||||
|
string project_grant_id = 5;
|
||||||
|
}
|
||||||
|
// Roles are the roles that should be granted to the user for the specified resource.
|
||||||
|
repeated string roles = 6 [(validate.rules).repeated = {
|
||||||
|
unique: true
|
||||||
|
items: {
|
||||||
|
string: {
|
||||||
|
min_len: 1
|
||||||
|
max_len: 200
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
|
||||||
|
message CreateManagerResponse {
|
||||||
|
// ID is the unique identifier of the newly created manager role.
|
||||||
|
string id = 1;
|
||||||
|
// CreationDate is the timestamp when the manager role was created.
|
||||||
|
google.protobuf.Timestamp creation_date = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
message UpdateManagerRequest {
|
||||||
|
// ManagerID is the ID of the manager role that should be updated.
|
||||||
|
string manager_role_id = 1 [(validate.rules).string = {
|
||||||
|
min_len: 1
|
||||||
|
max_len: 200
|
||||||
|
}];
|
||||||
|
// Roles are the roles that the user should be granted.
|
||||||
|
// Note that any role previously granted to the user and not present in the list will be revoked.
|
||||||
|
repeated string roles = 2 [(validate.rules).repeated = {
|
||||||
|
unique: true
|
||||||
|
items: {
|
||||||
|
string: {
|
||||||
|
min_len: 1
|
||||||
|
max_len: 200
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
|
||||||
|
message UpdateManagerResponse {
|
||||||
|
// ChangeDate is the timestamp when the manager role was last updated.
|
||||||
|
google.protobuf.Timestamp change_date = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message DeleteManagerRequest {
|
||||||
|
// ManagerID is the ID of the manager role the user should be removed from.
|
||||||
|
string manager_role_id = 1 [(validate.rules).string = {
|
||||||
|
min_len: 1
|
||||||
|
max_len: 200
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
|
||||||
|
message DeleteManagerResponse {
|
||||||
|
// DeletionDate is the timestamp when the manager role was deleted.
|
||||||
|
// Note that the deletion date is only guaranteed to be set if the deletion was successful during the request.
|
||||||
|
// In case the deletion occurred in a previous request, the deletion date might not be set.
|
||||||
|
google.protobuf.Timestamp deletion_date = 1;
|
||||||
|
}
|
@@ -11,10 +11,12 @@ import "zitadel/user/v2/idp.proto";
|
|||||||
import "zitadel/user/v2/password.proto";
|
import "zitadel/user/v2/password.proto";
|
||||||
import "zitadel/user/v2/user.proto";
|
import "zitadel/user/v2/user.proto";
|
||||||
import "zitadel/user/v2/query.proto";
|
import "zitadel/user/v2/query.proto";
|
||||||
|
import "zitadel/metadata/v2/metadata.proto";
|
||||||
import "google/api/annotations.proto";
|
import "google/api/annotations.proto";
|
||||||
import "google/api/field_behavior.proto";
|
import "google/api/field_behavior.proto";
|
||||||
import "google/protobuf/duration.proto";
|
import "google/protobuf/duration.proto";
|
||||||
import "google/protobuf/struct.proto";
|
import "google/protobuf/struct.proto";
|
||||||
|
import "google/protobuf/timestamp.proto";
|
||||||
import "protoc-gen-openapiv2/options/annotations.proto";
|
import "protoc-gen-openapiv2/options/annotations.proto";
|
||||||
import "validate/validate.proto";
|
import "validate/validate.proto";
|
||||||
|
|
||||||
@@ -1232,6 +1234,140 @@ service UserService {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ListMetadata returns all matching metadata entries for a user.
|
||||||
|
// You can filter by key only. Filtering by value is not supported yet.
|
||||||
|
// If no filter is specified, all metadata entries are returned.
|
||||||
|
//
|
||||||
|
// Required permissions:
|
||||||
|
// - 'user.read'
|
||||||
|
// - no permissions required for listing own metadata
|
||||||
|
rpc ListMetadata (ListMetadataRequest) returns (ListMetadataResponse) {}
|
||||||
|
|
||||||
|
// GetMetadata returns a single metadata entry of the user identified by the key.
|
||||||
|
//
|
||||||
|
// Required permissions:
|
||||||
|
// - 'user.read'
|
||||||
|
// - no permissions required for getting own metadata
|
||||||
|
rpc GetMetadata (GetMetadataRequest) returns (GetMetadataResponse) {}
|
||||||
|
|
||||||
|
// AddMetadata adds a new metadata entry to the user.
|
||||||
|
// If the key already exists, an error is returned.
|
||||||
|
//
|
||||||
|
// Required permissions:
|
||||||
|
// - 'user.write'
|
||||||
|
rpc AddMetadata (AddMetadataRequest) returns (AddMetadataResponse) {}
|
||||||
|
|
||||||
|
// UpdateMetadata updates an existing metadata entry of the user.
|
||||||
|
// If the key does not exist, an error is returned.
|
||||||
|
//
|
||||||
|
// Required permissions:
|
||||||
|
// - 'user.write'
|
||||||
|
rpc UpdateMetadata (UpdateMetadataRequest) returns (UpdateMetadataResponse) {}
|
||||||
|
|
||||||
|
// Set Metadata adds or updates a metadata entry of the user identified by the key.
|
||||||
|
// If the key does not exist, a new entry is created.
|
||||||
|
// If the key already exists, the value is updated.
|
||||||
|
// In case a key from an existing entry needs to be updated,
|
||||||
|
// the existing entry must be removed and a new one created.
|
||||||
|
//
|
||||||
|
// Required permissions:
|
||||||
|
// - 'user.write'
|
||||||
|
rpc SetMetadata (SetMetadataRequest) returns (SetMetadataResponse) {}
|
||||||
|
|
||||||
|
// Remove Metadata removes an existing metadata entry from the user.
|
||||||
|
// If the key does not exist, the request wil return a success as the
|
||||||
|
// desired state is already achieved.
|
||||||
|
// You can check the deletion date in the response to verify if the
|
||||||
|
// metadata entry was removed during the request.
|
||||||
|
//
|
||||||
|
// Required permissions:
|
||||||
|
// - 'user.write'
|
||||||
|
rpc RemoveMetadata (RemoveMetadataRequest) returns (RemoveMetadataResponse) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
message ListMetadataRequest{
|
||||||
|
// The user ID of the user you like to get the metadata from.
|
||||||
|
string user_id = 1 [(validate.rules).string = {min_len: 1, max_len: 200}];
|
||||||
|
// Paginate through the results using a limit.
|
||||||
|
zitadel.object.v2.ListQuery query = 2;
|
||||||
|
// Filter the metadata to be returned.
|
||||||
|
repeated zitadel.metadata.v2.MetadataQuery queries = 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
message ListMetadataResponse{
|
||||||
|
zitadel.object.v2.ListDetails details = 1;
|
||||||
|
repeated zitadel.metadata.v2.Metadata result = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
message GetMetadataRequest{
|
||||||
|
// The user ID of the user you like to get the metadata from.
|
||||||
|
string user_id = 1 [(validate.rules).string = {min_len: 1, max_len: 200}];
|
||||||
|
// Metadata key is the unique identifier of the metadata entry.
|
||||||
|
string metadata_key = 2 [(validate.rules).string = {min_len: 1, max_len: 200}];
|
||||||
|
}
|
||||||
|
|
||||||
|
message GetMetadataResponse{
|
||||||
|
zitadel.metadata.v2.Metadata metadata = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message AddMetadataRequest{
|
||||||
|
// The user ID of the user you like to add the metadata to.
|
||||||
|
string user_id = 1 [(validate.rules).string = {min_len: 1, max_len: 200}];
|
||||||
|
// Metadata key is the unique identifier of the metadata entry.
|
||||||
|
// If an entry with the same key already exists, an error is returned.
|
||||||
|
string metadata_key = 2 [(validate.rules).string = {min_len: 1, max_len: 200}];
|
||||||
|
// Metadata value is the value of the metadata entry.
|
||||||
|
bytes metadata_value = 3 [(validate.rules).bytes = {min_len: 1, max_len: 500000}];
|
||||||
|
}
|
||||||
|
|
||||||
|
message AddMetadataResponse{
|
||||||
|
// CreationDate is the timestamp the metadata entry was created.
|
||||||
|
google.protobuf.Timestamp creation_date = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message UpdateMetadataRequest{
|
||||||
|
// The user ID of the user you like to update the metadata from.
|
||||||
|
string user_id = 1 [(validate.rules).string = {min_len: 1, max_len: 200}];
|
||||||
|
// Metadata key is the unique identifier of the metadata entry.
|
||||||
|
// If an entry with the same key does not exist, an error is returned.
|
||||||
|
string metadata_key = 2 [(validate.rules).string = {min_len: 1, max_len: 200}];
|
||||||
|
// Metadata value is the value of the metadata entry.
|
||||||
|
bytes metadata_value = 3 [(validate.rules).bytes = {min_len: 1, max_len: 500000}];
|
||||||
|
}
|
||||||
|
|
||||||
|
message UpdateMetadataResponse{
|
||||||
|
// ChangeDate is the the timestamp the metadata entry was last updated.
|
||||||
|
google.protobuf.Timestamp change_date = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message SetMetadataRequest{
|
||||||
|
// The user ID of the user you like to set the metadata from.
|
||||||
|
string user_id = 1 [(validate.rules).string = {min_len: 1, max_len: 200}];
|
||||||
|
// Metadata key is the unique identifier of the metadata entry.
|
||||||
|
// An existing entry with the same key will be updated. The key cannot be changed.
|
||||||
|
// If you need to change the key, remove the existing entry and create a new one.
|
||||||
|
string metadata_key = 2 [(validate.rules).string = {min_len: 1, max_len: 200}];
|
||||||
|
// Metadata value is the value of the metadata entry.
|
||||||
|
bytes metadata_value = 3 [(validate.rules).bytes = {min_len: 1, max_len: 500000}];
|
||||||
|
}
|
||||||
|
|
||||||
|
message SetMetadataResponse{
|
||||||
|
// ChangeDate is the the timestamp the metadata entry was last set, either created or updated.
|
||||||
|
google.protobuf.Timestamp change_date = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
message RemoveMetadataRequest{
|
||||||
|
// The user ID of the user you like to remove the metadata from.
|
||||||
|
string user_id = 1 [(validate.rules).string = {min_len: 1, max_len: 200}];
|
||||||
|
// Metadata key is the unique identifier of the metadata entry.
|
||||||
|
string metadata_key = 2 [(validate.rules).string = {min_len: 1, max_len: 200}];
|
||||||
|
}
|
||||||
|
|
||||||
|
message RemoveMetadataResponse{
|
||||||
|
// DeletionDate is the timestamp the metadata entry was deleted.
|
||||||
|
// Note that the deletion date is only guaranteed to be set if the deletion was successful during the request.
|
||||||
|
// In case the deletion occurred in a previous request, the deletion date might not be set.
|
||||||
|
google.protobuf.Timestamp deletion_date = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
message AddHumanUserRequest{
|
message AddHumanUserRequest{
|
||||||
|
Reference in New Issue
Block a user