3
0

upd(rbac): test nested roles, get role info

This commit is contained in:
Tit Petric
2018-07-23 14:26:07 +02:00
parent 978557994f
commit 51b36d7bc7
3 changed files with 50 additions and 6 deletions
+26 -6
View File
@@ -2,7 +2,9 @@ package rbac
import (
"fmt"
"encoding/json"
"github.com/pkg/errors"
"github.com/crusttech/crust/rbac/types"
)
type (
@@ -11,18 +13,20 @@ type (
}
RolesInterface interface {
Create(role string) error
Delete(role string) error
Create(rolepath string) error
Delete(rolepath string) error
Get(rolepath string) (*types.Role, error)
}
)
const (
rolesCreate = "/roles/%s"
rolesGet = "/roles/%s"
rolesDelete = "/roles/%s"
)
func (u *Roles) Create(role string) error {
resp, err := u.Client.Post(fmt.Sprintf(rolesCreate, role), nil)
func (u *Roles) Create(rolepath string) error {
resp, err := u.Client.Post(fmt.Sprintf(rolesCreate, rolepath), nil)
if err != nil {
return errors.Wrap(err, "request failed")
}
@@ -35,8 +39,23 @@ func (u *Roles) Create(role string) error {
}
}
func (u *Roles) Delete(role string) error {
resp, err := u.Client.Delete(fmt.Sprintf(rolesDelete, role))
func (u *Roles) Get(rolepath string) (*types.Role, error) {
resp, err := u.Client.Get(fmt.Sprintf(rolesDelete, rolepath))
if err != nil {
return nil, errors.Wrap(err, "request failed")
}
defer resp.Body.Close()
switch resp.StatusCode {
case 200:
role := &types.Role{}
return role, errors.Wrap(json.NewDecoder(resp.Body).Decode(role), "decoding json failed")
default:
return nil, toError(resp)
}
}
func (u *Roles) Delete(rolepath string) error {
resp, err := u.Client.Delete(fmt.Sprintf(rolesDelete, rolepath))
if err != nil {
return errors.Wrap(err, "request failed")
}
@@ -49,4 +68,5 @@ func (u *Roles) Delete(role string) error {
}
}
var _ RolesInterface = &Roles{}
+16
View File
@@ -18,6 +18,22 @@ func TestRoles(t *testing.T) {
t.Errorf("Error when creating test-role: %+v", err)
}
if err := roles.Create("test-role/nested/role"); err == nil {
t.Errorf("Expected error when creating deep nested role, got nil")
return
}
if err := roles.Create("test-role/nested"); err != nil {
t.Errorf("Expected error when creating deep nested role, got nil")
return
}
{
role, err := roles.Get("test-role")
assert(t, err == nil, "Unexpected error when getting role, %+v", err)
assert(t, role.Name == "test-role", "Unexpected role name, test-role != '%s'", role.Name)
}
if err := roles.Delete("test-role"); err != nil {
t.Errorf("Error when deleting test-role: %+v", err)
}
+8
View File
@@ -12,4 +12,12 @@ type (
Username string `json:"username"`
Roles []string `json:"roles"`
}
// @todo: need to list nested roles,
// @todo: don't return users=null - return users: []?
Role struct {
Name string `json:"rolename"`
Users []string `json:"users"`
Permissions []string `json:"users"`
}
)