Changes
3 changed files (+92/-0)
-
-
@@ -68,6 +68,21 @@ func (p *Users) EventSeq() *uint64 {return p.eventSeq } var fullAccess = []types.Permission{ types.Permission_PERMISSION_ADD_REGULAR_USER, types.Permission_PERMISSION_ADD_ADMIN_USER, types.Permission_PERMISSION_DELETE_REGULAR_USER, types.Permission_PERMISSION_DELETE_ADMIN_USER, types.Permission_PERMISSION_READ_REGULAR_USER_PROFILE, types.Permission_PERMISSION_READ_ADMIN_USER_PROFILE, types.Permission_PERMISSION_UPDATE_REGULAR_USER_PROFILE, types.Permission_PERMISSION_UPDATE_ADMIN_USER_PROFILE, types.Permission_PERMISSION_UPDATE_SELF_PROFILE, types.Permission_PERMISSION_UPDATE_REGULAR_USER_LOGIN_METHOD, types.Permission_PERMISSION_UPDATE_ADMIN_USER_LOGIN_METHOD, types.Permission_PERMISSION_EDIT_WORKSPACE_PROFILE, } func (p *Users) Update(events []event.Event) { if len(events) == 0 || p.Projection == nil { return
-
@@ -142,6 +157,11 @@ }} for _, user := range p.Projection.Users { if user.GetIsAdmin() { user.Permissions = slices.Clone(fullAccess) continue } permissions := p.permissions[user.GetId()] s := make([]types.Permission, 0, len(permissions))
-
-
-
@@ -20,6 +20,9 @@_ "modernc.org/sqlite" ) // Permission メッセージのフィールド番号の最も大きい数字 const PERMISSION_MAX_NUMBER = 12 func TestUserPermissions(t *testing.T) { logger := slog.New(slog.NewTextHandler(io.Discard, nil)) db, err := sql.Open("sqlite", ":memory:")
-
@@ -77,3 +80,60 @@ }t.Errorf("User foo not created") } func TestAdminHaveFullPermissions(t *testing.T) { logger := slog.New(slog.NewTextHandler(io.Discard, nil)) db, err := sql.Open("sqlite", ":memory:") if err != nil { t.Fatal(err) } core, err := core.New(db, logger) if err != nil { t.Fatal(err) } tx, err := core.DB.Begin() if err != nil { t.Fatal(err) } err = event.AppendEvents(tx, []*eventV1.Event{ workspaceEvent.CreateUser("foo", "foo", "Foo", []byte{}), workspaceEvent.GrantAdminAccess("foo"), workspaceEvent.GrantPermission("foo", []types.Permission{ types.Permission_PERMISSION_ADD_REGULAR_USER, }), workspaceEvent.RevokePermission("foo", []types.Permission{ types.Permission_PERMISSION_EDIT_WORKSPACE_PROFILE, }), }) if err != nil { t.Fatal(err) } p, err := projection.GetUsers(tx) if err != nil { t.Fatal(err) } if err := event.UpdateProjections(tx, p); err != nil { t.Fatal(err) } for _, u := range p.Projection.Users { if u.GetId() == "foo" { if len(u.Permissions) != PERMISSION_MAX_NUMBER { t.Errorf( "Expected a slice of length of %d, got length of %d", PERMISSION_MAX_NUMBER, len(u.Permissions), ) } return } } t.Errorf("User foo not created") }
-
-
-
@@ -13,8 +13,14 @@// 通常ユーザの追加権限。 PERMISSION_ADD_REGULAR_USER = 1; // 管理者ユーザの追加権限。 PERMISSION_ADD_ADMIN_USER = 9; // 自分以外の通常ユーザの削除権限。 PERMISSION_DELETE_REGULAR_USER = 2; // 自分以外の管理者ユーザの削除権限。 PERMISSION_DELETE_ADMIN_USER = 10; // 自分以外の通常ユーザの基本情報閲覧権限。 PERMISSION_READ_REGULAR_USER_PROFILE = 3;
-
@@ -25,11 +31,17 @@// 自分以外の通常ユーザの基本情報変更権限。 PERMISSION_UPDATE_REGULAR_USER_PROFILE = 5; // 自分以外の管理者ユーザの基本情報変更権限。 PERMISSION_UPDATE_ADMIN_USER_PROFILE = 11; // 自身の基本情報変更権限。 PERMISSION_UPDATE_SELF_PROFILE = 6; // 自分以外の通常ユーザのログイン手段変更権限。 PERMISSION_UPDATE_REGULAR_USER_LOGIN_METHOD = 7; // 自分以外の管理者ユーザのログイン手段変更権限。 PERMISSION_UPDATE_ADMIN_USER_LOGIN_METHOD = 12; // ワークスペースの設定の変更権限。 PERMISSION_EDIT_WORKSPACE_PROFILE = 8;
-