upd(system): check service grant permission on read and list
This commit is contained in:
parent
5a6b496a92
commit
b7e2d9c127
@ -53,8 +53,11 @@ func (p *permissions) With(ctx context.Context) PermissionsService {
|
||||
func (p *permissions) List() (interface{}, error) {
|
||||
perms := []types.Permission{}
|
||||
for resource, operations := range permissionList {
|
||||
for ops := range operations {
|
||||
perms = append(perms, types.Permission{Resource: resource, Operation: ops})
|
||||
err := p.checkServiceAccess(resource)
|
||||
if err == nil {
|
||||
for ops := range operations {
|
||||
perms = append(perms, types.Permission{Resource: resource, Operation: ops})
|
||||
}
|
||||
}
|
||||
}
|
||||
return perms, nil
|
||||
@ -65,7 +68,20 @@ func (p *permissions) Check(resource string, operation string) rules.Access {
|
||||
}
|
||||
|
||||
func (p *permissions) Read(roleID uint64) (interface{}, error) {
|
||||
return p.resources.Read(roleID)
|
||||
ret, err := p.resources.Read(roleID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Only display rules under granted scopes.
|
||||
rules := []rules.Rule{}
|
||||
for _, rule := range ret {
|
||||
err = p.checkServiceAccess(rule.Resource)
|
||||
if err == nil {
|
||||
rules = append(rules, rule)
|
||||
}
|
||||
}
|
||||
return rules, nil
|
||||
}
|
||||
|
||||
func (p *permissions) Update(roleID uint64, rules []rules.Rule) (interface{}, error) {
|
||||
|
||||
@ -74,6 +74,16 @@ func TestPermission(t *testing.T) {
|
||||
NoError(t, err, "expected no error, got %v", err)
|
||||
}
|
||||
|
||||
// List possible permissions with `messaging` and `system` grants.
|
||||
{
|
||||
ret, err := permissionSvc.List()
|
||||
NoError(t, err, "expected no error, got %v", err)
|
||||
|
||||
perms := ret.([]types.Permission)
|
||||
|
||||
Assert(t, len(perms) > 0, "expected len(rules) > 0, got %v", len(perms))
|
||||
}
|
||||
|
||||
// Update rules for test role.
|
||||
{
|
||||
list := []rules.Rule{
|
||||
@ -141,13 +151,13 @@ func TestPermission(t *testing.T) {
|
||||
Assert(t, len(rules) == 0, "expected len(rules) == 0, got %v", len(rules))
|
||||
}
|
||||
|
||||
// List defined permissions.
|
||||
// List possible permissions with no grants.
|
||||
{
|
||||
ret, err := permissionSvc.List()
|
||||
NoError(t, err, "expected no error, got %v", err)
|
||||
|
||||
perms := ret.([]types.Permission)
|
||||
|
||||
Assert(t, len(perms) > 0, "expected len(rules) > 0, got %v", len(perms))
|
||||
Assert(t, len(perms) == 0, "expected len(rules) == 0, got %v", len(perms))
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user