mirror of
https://github.com/zitadel/zitadel.git
synced 2025-08-11 18:17:35 +00:00
feat(/internal): Add User Resource Owner (#9168)
Update the ../proto/zitadel/member.proto to include the UserResourceOwner as part of member. Update the queries to include UserResourceOwner for the following : zitadel/internal/query/iam_member.go zitadel/internal/query/org_member.go zitadel/internal/query/project_member.go zitadel/internal/query/project_grant_member.go Non Breaking Changes # Which Problems Are Solved https://github.com/zitadel/zitadel/issues/5062 # How the Problems Are Solved - Updated the member.proto file to include user_resource_owner. I have compiled using` make compile` command . - Changed the queries to include the userResourceOwner as part of Member. - Then, updated the converter to map the userResourceOwner. # Additional Changes Replace this example text with a concise list of additional changes that this PR introduces, that are not directly solving the initial problem but are related. For example: - The docs explicitly describe that the property XY is mandatory - Adds missing translations for validations. # Additional Context - Closes #5062 - https://discordapp.com/channels/927474939156643850/1326245856193544232/1326476710752948316
This commit is contained in:
@@ -34,6 +34,7 @@ func MemberToPb(assetAPIPrefix string, m *query.Member) *member_pb.Member {
|
||||
m.ChangeDate,
|
||||
m.ResourceOwner,
|
||||
),
|
||||
UserResourceOwner: m.UserResourceOwner,
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -44,6 +44,10 @@ var (
|
||||
name: projection.MemberResourceOwner,
|
||||
table: instanceMemberTable,
|
||||
}
|
||||
InstanceMemberUserResourceOwner = Column{
|
||||
name: projection.MemberUserResourceOwner,
|
||||
table: instanceMemberTable,
|
||||
}
|
||||
InstanceMemberInstanceID = Column{
|
||||
name: projection.MemberInstanceID,
|
||||
table: instanceMemberTable,
|
||||
@@ -96,6 +100,7 @@ func prepareInstanceMembersQuery(ctx context.Context, db prepareDatabase) (sq.Se
|
||||
InstanceMemberChangeDate.identifier(),
|
||||
InstanceMemberSequence.identifier(),
|
||||
InstanceMemberResourceOwner.identifier(),
|
||||
InstanceMemberUserResourceOwner.identifier(),
|
||||
InstanceMemberUserID.identifier(),
|
||||
InstanceMemberRoles.identifier(),
|
||||
LoginNameNameCol.identifier(),
|
||||
@@ -138,6 +143,7 @@ func prepareInstanceMembersQuery(ctx context.Context, db prepareDatabase) (sq.Se
|
||||
&member.ChangeDate,
|
||||
&member.Sequence,
|
||||
&member.ResourceOwner,
|
||||
&member.UserResourceOwner,
|
||||
&member.UserID,
|
||||
&member.Roles,
|
||||
&preferredLoginName,
|
||||
|
@@ -18,6 +18,7 @@ var (
|
||||
", members.change_date" +
|
||||
", members.sequence" +
|
||||
", members.resource_owner" +
|
||||
", members.user_resource_owner" +
|
||||
", members.user_id" +
|
||||
", members.roles" +
|
||||
", projections.login_names3.login_name" +
|
||||
@@ -45,6 +46,7 @@ var (
|
||||
"change_date",
|
||||
"sequence",
|
||||
"resource_owner",
|
||||
"user_resource_owner",
|
||||
"user_id",
|
||||
"roles",
|
||||
"login_name",
|
||||
@@ -97,6 +99,7 @@ func Test_IAMMemberPrepares(t *testing.T) {
|
||||
testNow,
|
||||
uint64(20211206),
|
||||
"ro",
|
||||
"uro",
|
||||
"user-id",
|
||||
database.TextArray[string]{"role-1", "role-2"},
|
||||
"gigi@caos-ag.zitadel.ch",
|
||||
@@ -121,6 +124,7 @@ func Test_IAMMemberPrepares(t *testing.T) {
|
||||
ChangeDate: testNow,
|
||||
Sequence: 20211206,
|
||||
ResourceOwner: "ro",
|
||||
UserResourceOwner: "uro",
|
||||
UserID: "user-id",
|
||||
Roles: database.TextArray[string]{"role-1", "role-2"},
|
||||
PreferredLoginName: "gigi@caos-ag.zitadel.ch",
|
||||
@@ -147,6 +151,7 @@ func Test_IAMMemberPrepares(t *testing.T) {
|
||||
testNow,
|
||||
uint64(20211206),
|
||||
"ro",
|
||||
"uro",
|
||||
"user-id",
|
||||
database.TextArray[string]{"role-1", "role-2"},
|
||||
"machine@caos-ag.zitadel.ch",
|
||||
@@ -171,6 +176,7 @@ func Test_IAMMemberPrepares(t *testing.T) {
|
||||
ChangeDate: testNow,
|
||||
Sequence: 20211206,
|
||||
ResourceOwner: "ro",
|
||||
UserResourceOwner: "uro",
|
||||
UserID: "user-id",
|
||||
Roles: database.TextArray[string]{"role-1", "role-2"},
|
||||
PreferredLoginName: "machine@caos-ag.zitadel.ch",
|
||||
@@ -197,6 +203,7 @@ func Test_IAMMemberPrepares(t *testing.T) {
|
||||
testNow,
|
||||
uint64(20211206),
|
||||
"ro",
|
||||
"uro",
|
||||
"user-id-1",
|
||||
database.TextArray[string]{"role-1", "role-2"},
|
||||
"gigi@caos-ag.zitadel.ch",
|
||||
@@ -213,6 +220,7 @@ func Test_IAMMemberPrepares(t *testing.T) {
|
||||
testNow,
|
||||
uint64(20211206),
|
||||
"ro",
|
||||
"uro",
|
||||
"user-id-2",
|
||||
database.TextArray[string]{"role-1", "role-2"},
|
||||
"machine@caos-ag.zitadel.ch",
|
||||
@@ -237,6 +245,7 @@ func Test_IAMMemberPrepares(t *testing.T) {
|
||||
ChangeDate: testNow,
|
||||
Sequence: 20211206,
|
||||
ResourceOwner: "ro",
|
||||
UserResourceOwner: "uro",
|
||||
UserID: "user-id-1",
|
||||
Roles: database.TextArray[string]{"role-1", "role-2"},
|
||||
PreferredLoginName: "gigi@caos-ag.zitadel.ch",
|
||||
@@ -252,6 +261,7 @@ func Test_IAMMemberPrepares(t *testing.T) {
|
||||
ChangeDate: testNow,
|
||||
Sequence: 20211206,
|
||||
ResourceOwner: "ro",
|
||||
UserResourceOwner: "uro",
|
||||
UserID: "user-id-2",
|
||||
Roles: database.TextArray[string]{"role-1", "role-2"},
|
||||
PreferredLoginName: "machine@caos-ag.zitadel.ch",
|
||||
|
@@ -47,11 +47,11 @@ type Members struct {
|
||||
}
|
||||
|
||||
type Member struct {
|
||||
CreationDate time.Time
|
||||
ChangeDate time.Time
|
||||
Sequence uint64
|
||||
ResourceOwner string
|
||||
|
||||
CreationDate time.Time
|
||||
ChangeDate time.Time
|
||||
Sequence uint64
|
||||
ResourceOwner string
|
||||
UserResourceOwner string
|
||||
UserID string
|
||||
Roles database.TextArray[string]
|
||||
PreferredLoginName string
|
||||
|
@@ -44,6 +44,10 @@ var (
|
||||
name: projection.MemberResourceOwner,
|
||||
table: orgMemberTable,
|
||||
}
|
||||
OrgMemberUserResourceOwner = Column{
|
||||
name: projection.MemberUserResourceOwner,
|
||||
table: orgMemberTable,
|
||||
}
|
||||
OrgMemberInstanceID = Column{
|
||||
name: projection.MemberInstanceID,
|
||||
table: orgMemberTable,
|
||||
@@ -99,6 +103,7 @@ func prepareOrgMembersQuery(ctx context.Context, db prepareDatabase) (sq.SelectB
|
||||
OrgMemberChangeDate.identifier(),
|
||||
OrgMemberSequence.identifier(),
|
||||
OrgMemberResourceOwner.identifier(),
|
||||
OrgMemberUserResourceOwner.identifier(),
|
||||
OrgMemberUserID.identifier(),
|
||||
OrgMemberRoles.identifier(),
|
||||
LoginNameNameCol.identifier(),
|
||||
@@ -141,6 +146,7 @@ func prepareOrgMembersQuery(ctx context.Context, db prepareDatabase) (sq.SelectB
|
||||
&member.ChangeDate,
|
||||
&member.Sequence,
|
||||
&member.ResourceOwner,
|
||||
&member.UserResourceOwner,
|
||||
&member.UserID,
|
||||
&member.Roles,
|
||||
&preferredLoginName,
|
||||
|
@@ -18,6 +18,7 @@ var (
|
||||
", members.change_date" +
|
||||
", members.sequence" +
|
||||
", members.resource_owner" +
|
||||
", members.user_resource_owner" +
|
||||
", members.user_id" +
|
||||
", members.roles" +
|
||||
", projections.login_names3.login_name" +
|
||||
@@ -49,6 +50,7 @@ var (
|
||||
"change_date",
|
||||
"sequence",
|
||||
"resource_owner",
|
||||
"user_resource_owner",
|
||||
"user_id",
|
||||
"roles",
|
||||
"login_name",
|
||||
@@ -101,6 +103,7 @@ func Test_OrgMemberPrepares(t *testing.T) {
|
||||
testNow,
|
||||
uint64(20211206),
|
||||
"ro",
|
||||
"uro",
|
||||
"user-id",
|
||||
database.TextArray[string]{"role-1", "role-2"},
|
||||
"gigi@caos-ag.zitadel.ch",
|
||||
@@ -125,6 +128,7 @@ func Test_OrgMemberPrepares(t *testing.T) {
|
||||
ChangeDate: testNow,
|
||||
Sequence: 20211206,
|
||||
ResourceOwner: "ro",
|
||||
UserResourceOwner: "uro",
|
||||
UserID: "user-id",
|
||||
Roles: database.TextArray[string]{"role-1", "role-2"},
|
||||
PreferredLoginName: "gigi@caos-ag.zitadel.ch",
|
||||
@@ -151,6 +155,7 @@ func Test_OrgMemberPrepares(t *testing.T) {
|
||||
testNow,
|
||||
uint64(20211206),
|
||||
"ro",
|
||||
"uro",
|
||||
"user-id",
|
||||
database.TextArray[string]{"role-1", "role-2"},
|
||||
"machine@caos-ag.zitadel.ch",
|
||||
@@ -175,6 +180,7 @@ func Test_OrgMemberPrepares(t *testing.T) {
|
||||
ChangeDate: testNow,
|
||||
Sequence: 20211206,
|
||||
ResourceOwner: "ro",
|
||||
UserResourceOwner: "uro",
|
||||
UserID: "user-id",
|
||||
Roles: database.TextArray[string]{"role-1", "role-2"},
|
||||
PreferredLoginName: "machine@caos-ag.zitadel.ch",
|
||||
@@ -201,6 +207,7 @@ func Test_OrgMemberPrepares(t *testing.T) {
|
||||
testNow,
|
||||
uint64(20211206),
|
||||
"ro",
|
||||
"uro",
|
||||
"user-id-1",
|
||||
database.TextArray[string]{"role-1", "role-2"},
|
||||
"gigi@caos-ag.zitadel.ch",
|
||||
@@ -217,6 +224,7 @@ func Test_OrgMemberPrepares(t *testing.T) {
|
||||
testNow,
|
||||
uint64(20211206),
|
||||
"ro",
|
||||
"uro",
|
||||
"user-id-2",
|
||||
database.TextArray[string]{"role-1", "role-2"},
|
||||
"machine@caos-ag.zitadel.ch",
|
||||
@@ -241,6 +249,7 @@ func Test_OrgMemberPrepares(t *testing.T) {
|
||||
ChangeDate: testNow,
|
||||
Sequence: 20211206,
|
||||
ResourceOwner: "ro",
|
||||
UserResourceOwner: "uro",
|
||||
UserID: "user-id-1",
|
||||
Roles: database.TextArray[string]{"role-1", "role-2"},
|
||||
PreferredLoginName: "gigi@caos-ag.zitadel.ch",
|
||||
@@ -256,6 +265,7 @@ func Test_OrgMemberPrepares(t *testing.T) {
|
||||
ChangeDate: testNow,
|
||||
Sequence: 20211206,
|
||||
ResourceOwner: "ro",
|
||||
UserResourceOwner: "uro",
|
||||
UserID: "user-id-2",
|
||||
Roles: database.TextArray[string]{"role-1", "role-2"},
|
||||
PreferredLoginName: "machine@caos-ag.zitadel.ch",
|
||||
|
@@ -43,6 +43,10 @@ var (
|
||||
name: projection.MemberResourceOwner,
|
||||
table: projectGrantMemberTable,
|
||||
}
|
||||
ProjectGrantMemberUserResourceOwner = Column{
|
||||
name: projection.MemberUserResourceOwner,
|
||||
table: projectGrantMemberTable,
|
||||
}
|
||||
ProjectGrantMemberInstanceID = Column{
|
||||
name: projection.MemberInstanceID,
|
||||
table: projectGrantMemberTable,
|
||||
@@ -108,6 +112,7 @@ func prepareProjectGrantMembersQuery(ctx context.Context, db prepareDatabase) (s
|
||||
ProjectGrantMemberChangeDate.identifier(),
|
||||
ProjectGrantMemberSequence.identifier(),
|
||||
ProjectGrantMemberResourceOwner.identifier(),
|
||||
ProjectGrantMemberUserResourceOwner.identifier(),
|
||||
ProjectGrantMemberUserID.identifier(),
|
||||
ProjectGrantMemberRoles.identifier(),
|
||||
LoginNameNameCol.identifier(),
|
||||
@@ -151,6 +156,7 @@ func prepareProjectGrantMembersQuery(ctx context.Context, db prepareDatabase) (s
|
||||
&member.ChangeDate,
|
||||
&member.Sequence,
|
||||
&member.ResourceOwner,
|
||||
&member.UserResourceOwner,
|
||||
&member.UserID,
|
||||
&member.Roles,
|
||||
&preferredLoginName,
|
||||
|
@@ -18,6 +18,7 @@ var (
|
||||
", members.change_date" +
|
||||
", members.sequence" +
|
||||
", members.resource_owner" +
|
||||
", members.user_resource_owner" +
|
||||
", members.user_id" +
|
||||
", members.roles" +
|
||||
", projections.login_names3.login_name" +
|
||||
@@ -52,6 +53,7 @@ var (
|
||||
"change_date",
|
||||
"sequence",
|
||||
"resource_owner",
|
||||
"user_resource_owner",
|
||||
"user_id",
|
||||
"roles",
|
||||
"login_name",
|
||||
@@ -104,6 +106,7 @@ func Test_ProjectGrantMemberPrepares(t *testing.T) {
|
||||
testNow,
|
||||
uint64(20211206),
|
||||
"ro",
|
||||
"uro",
|
||||
"user-id",
|
||||
database.TextArray[string]{"role-1", "role-2"},
|
||||
"gigi@caos-ag.zitadel.ch",
|
||||
@@ -128,6 +131,7 @@ func Test_ProjectGrantMemberPrepares(t *testing.T) {
|
||||
ChangeDate: testNow,
|
||||
Sequence: 20211206,
|
||||
ResourceOwner: "ro",
|
||||
UserResourceOwner: "uro",
|
||||
UserID: "user-id",
|
||||
Roles: database.TextArray[string]{"role-1", "role-2"},
|
||||
PreferredLoginName: "gigi@caos-ag.zitadel.ch",
|
||||
@@ -154,6 +158,7 @@ func Test_ProjectGrantMemberPrepares(t *testing.T) {
|
||||
testNow,
|
||||
uint64(20211206),
|
||||
"ro",
|
||||
"uro",
|
||||
"user-id",
|
||||
database.TextArray[string]{"role-1", "role-2"},
|
||||
"machine@caos-ag.zitadel.ch",
|
||||
@@ -178,6 +183,7 @@ func Test_ProjectGrantMemberPrepares(t *testing.T) {
|
||||
ChangeDate: testNow,
|
||||
Sequence: 20211206,
|
||||
ResourceOwner: "ro",
|
||||
UserResourceOwner: "uro",
|
||||
UserID: "user-id",
|
||||
Roles: database.TextArray[string]{"role-1", "role-2"},
|
||||
PreferredLoginName: "machine@caos-ag.zitadel.ch",
|
||||
@@ -204,6 +210,7 @@ func Test_ProjectGrantMemberPrepares(t *testing.T) {
|
||||
testNow,
|
||||
uint64(20211206),
|
||||
"ro",
|
||||
"uro",
|
||||
"user-id-1",
|
||||
database.TextArray[string]{"role-1", "role-2"},
|
||||
"gigi@caos-ag.zitadel.ch",
|
||||
@@ -220,6 +227,7 @@ func Test_ProjectGrantMemberPrepares(t *testing.T) {
|
||||
testNow,
|
||||
uint64(20211206),
|
||||
"ro",
|
||||
"uro",
|
||||
"user-id-2",
|
||||
database.TextArray[string]{"role-1", "role-2"},
|
||||
"machine@caos-ag.zitadel.ch",
|
||||
@@ -244,6 +252,7 @@ func Test_ProjectGrantMemberPrepares(t *testing.T) {
|
||||
ChangeDate: testNow,
|
||||
Sequence: 20211206,
|
||||
ResourceOwner: "ro",
|
||||
UserResourceOwner: "uro",
|
||||
UserID: "user-id-1",
|
||||
Roles: database.TextArray[string]{"role-1", "role-2"},
|
||||
PreferredLoginName: "gigi@caos-ag.zitadel.ch",
|
||||
@@ -259,6 +268,7 @@ func Test_ProjectGrantMemberPrepares(t *testing.T) {
|
||||
ChangeDate: testNow,
|
||||
Sequence: 20211206,
|
||||
ResourceOwner: "ro",
|
||||
UserResourceOwner: "uro",
|
||||
UserID: "user-id-2",
|
||||
Roles: database.TextArray[string]{"role-1", "role-2"},
|
||||
PreferredLoginName: "machine@caos-ag.zitadel.ch",
|
||||
|
@@ -44,6 +44,10 @@ var (
|
||||
name: projection.MemberResourceOwner,
|
||||
table: projectMemberTable,
|
||||
}
|
||||
ProjectMemberUserResourceOwner = Column{
|
||||
name: projection.MemberUserResourceOwner,
|
||||
table: projectMemberTable,
|
||||
}
|
||||
ProjectMemberInstanceID = Column{
|
||||
name: projection.MemberInstanceID,
|
||||
table: projectMemberTable,
|
||||
@@ -99,6 +103,7 @@ func prepareProjectMembersQuery(ctx context.Context, db prepareDatabase) (sq.Sel
|
||||
ProjectMemberChangeDate.identifier(),
|
||||
ProjectMemberSequence.identifier(),
|
||||
ProjectMemberResourceOwner.identifier(),
|
||||
ProjectMemberUserResourceOwner.identifier(),
|
||||
ProjectMemberUserID.identifier(),
|
||||
ProjectMemberRoles.identifier(),
|
||||
LoginNameNameCol.identifier(),
|
||||
@@ -141,6 +146,7 @@ func prepareProjectMembersQuery(ctx context.Context, db prepareDatabase) (sq.Sel
|
||||
&member.ChangeDate,
|
||||
&member.Sequence,
|
||||
&member.ResourceOwner,
|
||||
&member.UserResourceOwner,
|
||||
&member.UserID,
|
||||
&member.Roles,
|
||||
&preferredLoginName,
|
||||
|
@@ -18,6 +18,7 @@ var (
|
||||
", members.change_date" +
|
||||
", members.sequence" +
|
||||
", members.resource_owner" +
|
||||
", members.user_resource_owner" +
|
||||
", members.user_id" +
|
||||
", members.roles" +
|
||||
", projections.login_names3.login_name" +
|
||||
@@ -49,6 +50,7 @@ var (
|
||||
"change_date",
|
||||
"sequence",
|
||||
"resource_owner",
|
||||
"user_resource_owner",
|
||||
"user_id",
|
||||
"roles",
|
||||
"login_name",
|
||||
@@ -101,6 +103,7 @@ func Test_ProjectMemberPrepares(t *testing.T) {
|
||||
testNow,
|
||||
uint64(20211206),
|
||||
"ro",
|
||||
"uro",
|
||||
"user-id",
|
||||
database.TextArray[string]{"role-1", "role-2"},
|
||||
"gigi@caos-ag.zitadel.ch",
|
||||
@@ -125,6 +128,7 @@ func Test_ProjectMemberPrepares(t *testing.T) {
|
||||
ChangeDate: testNow,
|
||||
Sequence: 20211206,
|
||||
ResourceOwner: "ro",
|
||||
UserResourceOwner: "uro",
|
||||
UserID: "user-id",
|
||||
Roles: database.TextArray[string]{"role-1", "role-2"},
|
||||
PreferredLoginName: "gigi@caos-ag.zitadel.ch",
|
||||
@@ -151,6 +155,7 @@ func Test_ProjectMemberPrepares(t *testing.T) {
|
||||
testNow,
|
||||
uint64(20211206),
|
||||
"ro",
|
||||
"uro",
|
||||
"user-id",
|
||||
database.TextArray[string]{"role-1", "role-2"},
|
||||
"machine@caos-ag.zitadel.ch",
|
||||
@@ -175,6 +180,7 @@ func Test_ProjectMemberPrepares(t *testing.T) {
|
||||
ChangeDate: testNow,
|
||||
Sequence: 20211206,
|
||||
ResourceOwner: "ro",
|
||||
UserResourceOwner: "uro",
|
||||
UserID: "user-id",
|
||||
Roles: database.TextArray[string]{"role-1", "role-2"},
|
||||
PreferredLoginName: "machine@caos-ag.zitadel.ch",
|
||||
@@ -201,6 +207,7 @@ func Test_ProjectMemberPrepares(t *testing.T) {
|
||||
testNow,
|
||||
uint64(20211206),
|
||||
"ro",
|
||||
"uro",
|
||||
"user-id-1",
|
||||
database.TextArray[string]{"role-1", "role-2"},
|
||||
"gigi@caos-ag.zitadel.ch",
|
||||
@@ -217,6 +224,7 @@ func Test_ProjectMemberPrepares(t *testing.T) {
|
||||
testNow,
|
||||
uint64(20211206),
|
||||
"ro",
|
||||
"uro",
|
||||
"user-id-2",
|
||||
database.TextArray[string]{"role-1", "role-2"},
|
||||
"machine@caos-ag.zitadel.ch",
|
||||
@@ -241,6 +249,7 @@ func Test_ProjectMemberPrepares(t *testing.T) {
|
||||
ChangeDate: testNow,
|
||||
Sequence: 20211206,
|
||||
ResourceOwner: "ro",
|
||||
UserResourceOwner: "uro",
|
||||
UserID: "user-id-1",
|
||||
Roles: database.TextArray[string]{"role-1", "role-2"},
|
||||
PreferredLoginName: "gigi@caos-ag.zitadel.ch",
|
||||
@@ -256,6 +265,7 @@ func Test_ProjectMemberPrepares(t *testing.T) {
|
||||
ChangeDate: testNow,
|
||||
Sequence: 20211206,
|
||||
ResourceOwner: "ro",
|
||||
UserResourceOwner: "uro",
|
||||
UserID: "user-id-2",
|
||||
Roles: database.TextArray[string]{"role-1", "role-2"},
|
||||
PreferredLoginName: "machine@caos-ag.zitadel.ch",
|
||||
|
Reference in New Issue
Block a user