Skip to content

Commit 2392784

Browse files
authored
Change roles to one format (#4)
1 parent de8f2ed commit 2392784

File tree

10 files changed

+139
-155
lines changed

10 files changed

+139
-155
lines changed

examples/serviceuser-create-update-delete/main.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"fmt"
66

77
"github.com/selectel/iam-go"
8+
"github.com/selectel/iam-go/service/roles"
89
"github.com/selectel/iam-go/service/serviceusers"
910
)
1011

@@ -43,7 +44,7 @@ func main() {
4344
Enabled: true,
4445
Name: name,
4546
Password: password,
46-
Roles: []serviceusers.Role{{Scope: serviceusers.Account, RoleName: serviceusers.Billing}},
47+
Roles: []roles.Role{{Scope: roles.Account, RoleName: roles.Billing}},
4748
})
4849
// Handle the error.
4950
if err != nil {

examples/transfer-role/main.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"fmt"
66

77
"github.com/selectel/iam-go"
8+
"github.com/selectel/iam-go/service/roles"
89
"github.com/selectel/iam-go/service/users"
910
)
1011

@@ -45,7 +46,7 @@ func main() {
4546
var chosenUser *users.User
4647
for _, user := range allUsers {
4748
for _, role := range user.Roles {
48-
if role.RoleName == users.Billing && user.ID != "account_root" {
49+
if role.RoleName == roles.Billing && user.ID != "account_root" {
4950
chosenUser = &user
5051
break
5152
}
@@ -67,7 +68,7 @@ func main() {
6768
err = usersAPI.UnassignRoles(
6869
ctx,
6970
chosenUser.ID,
70-
[]users.Role{{Scope: users.Account, RoleName: users.Billing}},
71+
[]roles.Role{{Scope: roles.Account, RoleName: roles.Billing}},
7172
)
7273

7374
// Handle the error.
@@ -83,7 +84,7 @@ func main() {
8384
err = usersAPI.AssignRoles(
8485
ctx,
8586
userID,
86-
[]users.Role{{Scope: users.Account, RoleName: users.Billing}},
87+
[]roles.Role{{Scope: roles.Account, RoleName: roles.Billing}},
8788
)
8889

8990
// Handle the error.

examples/user-create-delete/main.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"fmt"
66

77
"github.com/selectel/iam-go"
8+
"github.com/selectel/iam-go/service/roles"
89
"github.com/selectel/iam-go/service/users"
910
)
1011

@@ -23,7 +24,6 @@ func main() {
2324
iam.WithAuthOpts(&iam.AuthOpts{KeystoneToken: token}),
2425
iam.WithUserAgentPrefix(prefix),
2526
)
26-
2727
// Handle the error.
2828
if err != nil {
2929
fmt.Println(err)
@@ -41,7 +41,7 @@ func main() {
4141
AuthType: users.Local,
4242
Email: email,
4343
Federation: nil,
44-
Roles: []users.Role{{Scope: users.Account, RoleName: users.Billing}},
44+
Roles: []roles.Role{{Scope: roles.Account, RoleName: roles.Billing}},
4545
})
4646
// Handle the error.
4747
if err != nil {

service/roles/schemas.go

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package roles
2+
3+
// Name represents a role, which can be assigned to a user or a service user.
4+
// For additional information, see
5+
// https://docs.selectel.ru/control-panel-actions/users-and-roles/user-types-and-roles/#user-roles.
6+
type Name string
7+
8+
const (
9+
// Account owner.
10+
AccountOwner Name = "account_owner"
11+
12+
// User administrator.
13+
IAMAdmin Name = "iam_admin"
14+
15+
// Account/Project administrator.
16+
Member Name = "member"
17+
18+
// Account/Project reader.
19+
Reader Name = "reader"
20+
21+
// Billing administrator.
22+
Billing Name = "billing"
23+
24+
// Object storage administrator. Can be assigned only to a service user.
25+
ObjectStorageAdmin Name = "object_storage:admin"
26+
27+
// Object storage user. Can be assigned only to a service user.
28+
ObjectStorageUser Name = "object_storage_user"
29+
)
30+
31+
// Scope represents a scope of a role.
32+
type Scope string
33+
34+
const (
35+
// Project scope.
36+
Project Scope = "project"
37+
38+
// Account scope.
39+
Account Scope = "account"
40+
)
41+
42+
type Role struct {
43+
ProjectID string `json:"project_id,omitempty"`
44+
RoleName Name `json:"role_name"`
45+
Scope Scope `json:"scope"`
46+
}

service/serviceusers/requests.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99

1010
"github.com/selectel/iam-go/iamerrors"
1111
"github.com/selectel/iam-go/internal/client"
12+
"github.com/selectel/iam-go/service/roles"
1213
)
1314

1415
const apiVersion = "iam/v1"
@@ -187,7 +188,7 @@ func (su *ServiceUsers) Update(ctx context.Context, userID string, input UpdateR
187188
}
188189

189190
// AssignRoles adds new roles for a Service User with the given userID.
190-
func (su *ServiceUsers) AssignRoles(ctx context.Context, userID string, roles []Role) error {
191+
func (su *ServiceUsers) AssignRoles(ctx context.Context, userID string, roles []roles.Role) error {
191192
if userID == "" {
192193
return iamerrors.Error{Err: iamerrors.ErrUserIDRequired, Desc: "No userID was provided."}
193194
}
@@ -202,7 +203,7 @@ func (su *ServiceUsers) AssignRoles(ctx context.Context, userID string, roles []
202203
}
203204

204205
// UnassignRoles removes roles from a Service User with the given userID.
205-
func (su *ServiceUsers) UnassignRoles(ctx context.Context, userID string, roles []Role) error {
206+
func (su *ServiceUsers) UnassignRoles(ctx context.Context, userID string, roles []roles.Role) error {
206207
if userID == "" {
207208
return iamerrors.Error{Err: iamerrors.ErrUserIDRequired, Desc: "No userID was provided."}
208209
}
@@ -216,7 +217,7 @@ func (su *ServiceUsers) UnassignRoles(ctx context.Context, userID string, roles
216217
return su.manageRoles(ctx, http.MethodDelete, userID, roles)
217218
}
218219

219-
func (su *ServiceUsers) manageRoles(ctx context.Context, method string, userID string, roles []Role) error {
220+
func (su *ServiceUsers) manageRoles(ctx context.Context, method string, userID string, roles []roles.Role) error {
220221
path, err := url.JoinPath(apiVersion, "service_users", userID, "roles")
221222
if err != nil {
222223
return iamerrors.Error{Err: iamerrors.ErrInternalAppError, Desc: err.Error()}

service/serviceusers/requests_test.go

Lines changed: 24 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111

1212
"github.com/selectel/iam-go/iamerrors"
1313
"github.com/selectel/iam-go/internal/client"
14+
"github.com/selectel/iam-go/service/roles"
1415
"github.com/selectel/iam-go/service/serviceusers/testdata"
1516
)
1617

@@ -41,8 +42,8 @@ func TestList(t *testing.T) {
4142
Name: "test",
4243
Enabled: true,
4344
ID: "123",
44-
Roles: []Role{
45-
{Scope: Account, RoleName: Member},
45+
Roles: []roles.Role{
46+
{Scope: roles.Account, RoleName: roles.Member},
4647
},
4748
},
4849
},
@@ -115,8 +116,8 @@ func TestGet(t *testing.T) {
115116
Name: "test",
116117
Enabled: true,
117118
ID: "123",
118-
Roles: []Role{
119-
{Scope: Account, RoleName: Member},
119+
Roles: []roles.Role{
120+
{Scope: roles.Account, RoleName: roles.Member},
120121
},
121122
},
122123
expectedError: nil,
@@ -235,7 +236,7 @@ func TestCreate(t *testing.T) {
235236
enabled bool
236237
name string
237238
password string
238-
roles []Role
239+
roles []roles.Role
239240
}
240241
tests := []struct {
241242
name string
@@ -250,8 +251,8 @@ func TestCreate(t *testing.T) {
250251
enabled: true,
251252
name: "test",
252253
password: "Qazwsxedc123",
253-
roles: []Role{
254-
{Scope: Account, RoleName: Member},
254+
roles: []roles.Role{
255+
{Scope: roles.Account, RoleName: roles.Member},
255256
},
256257
},
257258
prepare: func() {
@@ -265,8 +266,8 @@ func TestCreate(t *testing.T) {
265266
Name: "test",
266267
Enabled: true,
267268
ID: "123",
268-
Roles: []Role{
269-
{Scope: Account, RoleName: Member},
269+
Roles: []roles.Role{
270+
{Scope: roles.Account, RoleName: roles.Member},
270271
},
271272
},
272273
expectedError: nil,
@@ -277,8 +278,8 @@ func TestCreate(t *testing.T) {
277278
enabled: true,
278279
name: "test",
279280
password: "123",
280-
roles: []Role{
281-
{Scope: Account, RoleName: Member},
281+
roles: []roles.Role{
282+
{Scope: roles.Account, RoleName: roles.Member},
282283
},
283284
},
284285
prepare: func() {
@@ -300,8 +301,8 @@ func TestCreate(t *testing.T) {
300301
enabled: true,
301302
name: "test",
302303
password: "123",
303-
roles: []Role{
304-
{Scope: Account, RoleName: Member},
304+
roles: []roles.Role{
305+
{Scope: roles.Account, RoleName: roles.Member},
305306
},
306307
},
307308
prepare: func() {
@@ -434,7 +435,7 @@ func TestUpdate(t *testing.T) {
434435
func TestAssignRoles(t *testing.T) {
435436
type args struct {
436437
userID string
437-
roles []Role
438+
roles []roles.Role
438439
}
439440
tests := []struct {
440441
name string
@@ -446,8 +447,8 @@ func TestAssignRoles(t *testing.T) {
446447
name: "Test AssignRoles return output",
447448
args: args{
448449
userID: "123",
449-
roles: []Role{
450-
{Scope: Account, RoleName: Member},
450+
roles: []roles.Role{
451+
{Scope: roles.Account, RoleName: roles.Member},
451452
},
452453
},
453454
prepare: func() {
@@ -464,8 +465,8 @@ func TestAssignRoles(t *testing.T) {
464465
name: "Test AssignRoles return error",
465466
args: args{
466467
userID: "123",
467-
roles: []Role{
468-
{Scope: Account, RoleName: Member},
468+
roles: []roles.Role{
469+
{Scope: roles.Account, RoleName: roles.Member},
469470
},
470471
},
471472
prepare: func() {
@@ -506,7 +507,7 @@ func TestAssignRoles(t *testing.T) {
506507
func TestUnassignRoles(t *testing.T) {
507508
type args struct {
508509
userID string
509-
roles []Role
510+
roles []roles.Role
510511
}
511512
tests := []struct {
512513
name string
@@ -518,8 +519,8 @@ func TestUnassignRoles(t *testing.T) {
518519
name: "Test UnassignRoles return output",
519520
args: args{
520521
userID: "123",
521-
roles: []Role{
522-
{Scope: Account, RoleName: Member},
522+
roles: []roles.Role{
523+
{Scope: roles.Account, RoleName: roles.Member},
523524
},
524525
},
525526
prepare: func() {
@@ -536,8 +537,8 @@ func TestUnassignRoles(t *testing.T) {
536537
name: "Test UnassignRoles return error",
537538
args: args{
538539
userID: "123",
539-
roles: []Role{
540-
{Scope: Account, RoleName: Member},
540+
roles: []roles.Role{
541+
{Scope: roles.Account, RoleName: roles.Member},
541542
},
542543
},
543544
prepare: func() {

service/serviceusers/schemas.go

Lines changed: 11 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -1,60 +1,21 @@
11
package serviceusers
22

3-
type RoleName string
4-
5-
const (
6-
// Account owner.
7-
AccountOwner RoleName = "account_owner"
8-
9-
// User administrator.
10-
IAMAdmin RoleName = "iam_admin"
11-
12-
// Account/Project administrator.
13-
Member RoleName = "member"
14-
15-
// Account/Project reader.
16-
Reader RoleName = "reader"
17-
18-
// Billing administrator.
19-
Billing RoleName = "billing"
20-
21-
// Object storage administrator.
22-
ObjectStorageAdmin RoleName = "object_storage:admin"
23-
24-
// Object storage user.
25-
ObjectStorageUser RoleName = "object_storage_user"
26-
)
27-
28-
type Scope string
29-
30-
const (
31-
// Project scope.
32-
Project Scope = "project"
33-
34-
// Account scope.
35-
Account Scope = "account"
36-
)
3+
import "github.com/selectel/iam-go/service/roles"
374

385
// ServiceUser represents a Selectel Service User.
396
type ServiceUser struct {
40-
ID string `json:"id"`
41-
Enabled bool `json:"enabled"`
42-
Name string `json:"name"`
43-
Roles []Role `json:"roles"`
44-
}
45-
46-
type Role struct {
47-
ProjectID string `json:"project_id,omitempty"`
48-
RoleName RoleName `json:"role_name"`
49-
Scope Scope `json:"scope"`
7+
ID string `json:"id"`
8+
Enabled bool `json:"enabled"`
9+
Name string `json:"name"`
10+
Roles []roles.Role `json:"roles"`
5011
}
5112

5213
// CreateRequest is used to set options for Create method.
5314
type CreateRequest struct {
5415
Enabled bool
5516
Name string
5617
Password string
57-
Roles []Role
18+
Roles []roles.Role
5819
}
5920

6021
// UpdateRequest is used to set options for Update method.
@@ -65,10 +26,10 @@ type UpdateRequest struct {
6526
}
6627

6728
type createRequest struct {
68-
Enabled bool `json:"enabled,omitempty"`
69-
Name string `json:"name,omitempty"`
70-
Password string `json:"password,omitempty"`
71-
Roles []Role `json:"roles,omitempty"`
29+
Enabled bool `json:"enabled,omitempty"`
30+
Name string `json:"name,omitempty"`
31+
Password string `json:"password,omitempty"`
32+
Roles []roles.Role `json:"roles,omitempty"`
7233
}
7334

7435
type updateRequest struct {
@@ -78,7 +39,7 @@ type updateRequest struct {
7839
}
7940

8041
type manageRolesRequest struct {
81-
Roles []Role `json:"roles"`
42+
Roles []roles.Role `json:"roles"`
8243
}
8344

8445
type listResponse struct {

0 commit comments

Comments
 (0)