upd(rbac): test nested roles, get role info
This commit is contained in:
+26
-6
@@ -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{}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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"`
|
||||
}
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user