diff --git a/internal/api/grpc/member/converter.go b/internal/api/grpc/member/converter.go index 0e5c87ceb1..af81d8ea45 100644 --- a/internal/api/grpc/member/converter.go +++ b/internal/api/grpc/member/converter.go @@ -34,6 +34,7 @@ func MemberToPb(assetAPIPrefix string, m *query.Member) *member_pb.Member { m.ChangeDate, m.ResourceOwner, ), + UserResourceOwner: m.UserResourceOwner, } } diff --git a/internal/query/iam_member.go b/internal/query/iam_member.go index 9f1c5521c9..87b906aa51 100644 --- a/internal/query/iam_member.go +++ b/internal/query/iam_member.go @@ -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, diff --git a/internal/query/iam_member_test.go b/internal/query/iam_member_test.go index 2ab62d3244..38b9bbc8bc 100644 --- a/internal/query/iam_member_test.go +++ b/internal/query/iam_member_test.go @@ -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", diff --git a/internal/query/member.go b/internal/query/member.go index 2c4b4db5fe..584ae15d1c 100644 --- a/internal/query/member.go +++ b/internal/query/member.go @@ -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 diff --git a/internal/query/org_member.go b/internal/query/org_member.go index ea452fe357..4daa31d341 100644 --- a/internal/query/org_member.go +++ b/internal/query/org_member.go @@ -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, diff --git a/internal/query/org_member_test.go b/internal/query/org_member_test.go index d0247c39d3..d42c9b4317 100644 --- a/internal/query/org_member_test.go +++ b/internal/query/org_member_test.go @@ -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", diff --git a/internal/query/project_grant_member.go b/internal/query/project_grant_member.go index c13300713f..0820ada826 100644 --- a/internal/query/project_grant_member.go +++ b/internal/query/project_grant_member.go @@ -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, diff --git a/internal/query/project_grant_member_test.go b/internal/query/project_grant_member_test.go index 839a1f2c1b..f55841ff76 100644 --- a/internal/query/project_grant_member_test.go +++ b/internal/query/project_grant_member_test.go @@ -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", diff --git a/internal/query/project_member.go b/internal/query/project_member.go index a86246bdd7..347eac12b9 100644 --- a/internal/query/project_member.go +++ b/internal/query/project_member.go @@ -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, diff --git a/internal/query/project_member_test.go b/internal/query/project_member_test.go index 74f35ef6ee..21be454f43 100644 --- a/internal/query/project_member_test.go +++ b/internal/query/project_member_test.go @@ -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", diff --git a/proto/zitadel/member.proto b/proto/zitadel/member.proto index 07091e195e..c3351a99d3 100644 --- a/proto/zitadel/member.proto +++ b/proto/zitadel/member.proto @@ -63,6 +63,14 @@ message Member { description: "type of the user (human / machine)" } ]; + + // The organization the user belong to. + string user_resource_owner = 11 [ + (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { + example: "\"69629023906488334\""; + } + ]; + } message SearchQuery {