3
0

upd(messaging): permissions to rules

This commit is contained in:
Mitja Zivkovic
2019-02-12 21:10:16 +01:00
parent f0d21263e6
commit f155f48bdf
14 changed files with 151 additions and 162 deletions

View File

@@ -704,15 +704,15 @@
"parameters": {}
},
{
"name": "getTeam",
"path": "/permissions/{team}",
"name": "get",
"path": "/permissions/{teamID}",
"method": "GET",
"title": "Retrieve current permission settings",
"parameters": {
"path": [
{
"name": "team",
"type": "string",
"name": "teamID",
"type": "uint64",
"required": true,
"title": "Team ID"
}
@@ -734,15 +734,15 @@
}
},
{
"name": "setTeam",
"path": "/permissions/{team}",
"name": "set",
"path": "/permissions/{teamID}",
"method": "POST",
"title": "Update permission settings",
"parameters": {
"path": [
{
"name": "team",
"type": "string",
"name": "teamID",
"type": "uint64",
"required": true,
"title": "Team ID"
}
@@ -750,9 +750,9 @@
"post": [
{
"name": "permissions",
"type": "[]rules.Permission",
"type": "[]rules.Rules",
"required": true,
"title": "List of permissions to set"
"title": "List of rules to set"
}
]
}

View File

@@ -24,10 +24,10 @@
"Parameters": {}
},
{
"Name": "getTeam",
"Name": "get",
"Method": "GET",
"Title": "Retrieve current permission settings",
"Path": "/permissions/{team}",
"Path": "/permissions/{teamID}",
"Parameters": {
"get": [
{
@@ -45,34 +45,34 @@
],
"path": [
{
"name": "team",
"name": "teamID",
"required": true,
"title": "Team ID",
"type": "string"
"type": "uint64"
}
]
}
},
{
"Name": "setTeam",
"Name": "set",
"Method": "POST",
"Title": "Update permission settings",
"Path": "/permissions/{team}",
"Path": "/permissions/{teamID}",
"Parameters": {
"path": [
{
"name": "team",
"name": "teamID",
"required": true,
"title": "Team ID",
"type": "string"
"type": "uint64"
}
],
"post": [
{
"name": "permissions",
"required": true,
"title": "List of permissions to set",
"type": "[]rules.Permission"
"title": "List of rules to set",
"type": "[]rules.Rules"
}
]
}

View File

@@ -469,7 +469,7 @@ The following event types may be sent with a message event:
| URI | Protocol | Method | Authentication |
| --- | -------- | ------ | -------------- |
| `/permissions/permissions/{team}` | HTTP/S | GET | Client ID, Session ID |
| `/permissions/permissions/{teamID}` | HTTP/S | GET | Client ID, Session ID |
#### Request parameters
@@ -477,7 +477,7 @@ The following event types may be sent with a message event:
| --------- | ---- | ------ | ----------- | ------- | --------- |
| scope | string | GET | Permissions scope | N/A | YES |
| resource | string | GET | Permissions resource | N/A | YES |
| team | string | PATH | Team ID | N/A | YES |
| teamID | uint64 | PATH | Team ID | N/A | YES |
## Update permission settings
@@ -485,14 +485,14 @@ The following event types may be sent with a message event:
| URI | Protocol | Method | Authentication |
| --- | -------- | ------ | -------------- |
| `/permissions/permissions/{team}` | HTTP/S | POST | Client ID, Session ID |
| `/permissions/permissions/{teamID}` | HTTP/S | POST | Client ID, Session ID |
#### Request parameters
| Parameter | Type | Method | Description | Default | Required? |
| --------- | ---- | ------ | ----------- | ------- | --------- |
| team | string | PATH | Team ID | N/A | YES |
| permissions | []rules.Permission | POST | List of permissions to set | N/A | YES |
| teamID | uint64 | PATH | Team ID | N/A | YES |
| permissions | []rules.Rules | POST | List of rules to set | N/A | YES |

View File

@@ -21,15 +21,4 @@ type (
// false = unchecked (deny)
Default Access `json:"default"`
}
Permission struct {
// Scope (organisation, team, channel)
Scope string `json:"scope"`
// Resource (org:1, team:123123, etc.)
Resource string `json:"resource"`
// Operation name (Operation.Key)
Operation string `json:"operation"`
// Operation state (inherit, allow, deny)
State Access `json:"state"`
}
)

View File

@@ -28,15 +28,15 @@ import (
// Internal API interface
type PermissionsAPI interface {
List(context.Context, *request.PermissionsList) (interface{}, error)
GetTeam(context.Context, *request.PermissionsGetTeam) (interface{}, error)
SetTeam(context.Context, *request.PermissionsSetTeam) (interface{}, error)
Get(context.Context, *request.PermissionsGet) (interface{}, error)
Set(context.Context, *request.PermissionsSet) (interface{}, error)
}
// HTTP API interface
type Permissions struct {
List func(http.ResponseWriter, *http.Request)
GetTeam func(http.ResponseWriter, *http.Request)
SetTeam func(http.ResponseWriter, *http.Request)
List func(http.ResponseWriter, *http.Request)
Get func(http.ResponseWriter, *http.Request)
Set func(http.ResponseWriter, *http.Request)
}
func NewPermissions(ph PermissionsAPI) *Permissions {
@@ -48,18 +48,18 @@ func NewPermissions(ph PermissionsAPI) *Permissions {
return ph.List(r.Context(), params)
})
},
GetTeam: func(w http.ResponseWriter, r *http.Request) {
Get: func(w http.ResponseWriter, r *http.Request) {
defer r.Body.Close()
params := request.NewPermissionsGetTeam()
params := request.NewPermissionsGet()
resputil.JSON(w, params.Fill(r), func() (interface{}, error) {
return ph.GetTeam(r.Context(), params)
return ph.Get(r.Context(), params)
})
},
SetTeam: func(w http.ResponseWriter, r *http.Request) {
Set: func(w http.ResponseWriter, r *http.Request) {
defer r.Body.Close()
params := request.NewPermissionsSetTeam()
params := request.NewPermissionsSet()
resputil.JSON(w, params.Fill(r), func() (interface{}, error) {
return ph.SetTeam(r.Context(), params)
return ph.Set(r.Context(), params)
})
},
}
@@ -70,8 +70,8 @@ func (ph *Permissions) MountRoutes(r chi.Router, middlewares ...func(http.Handle
r.Use(middlewares...)
r.Route("/permissions", func(r chi.Router) {
r.Get("/permissions", ph.List)
r.Get("/permissions/{team}", ph.GetTeam)
r.Post("/permissions/{team}", ph.SetTeam)
r.Get("/permissions/{teamID}", ph.Get)
r.Post("/permissions/{teamID}", ph.Set)
})
})
}

View File

@@ -24,10 +24,10 @@ func (ctrl *Permissions) List(ctx context.Context, r *request.PermissionsList) (
return ctrl.svc.perms.List()
}
func (ctrl *Permissions) GetTeam(ctx context.Context, r *request.PermissionsGetTeam) (interface{}, error) {
return ctrl.svc.perms.Get(r.Team, r.Scope, r.Resource)
func (ctrl *Permissions) Get(ctx context.Context, r *request.PermissionsGet) (interface{}, error) {
return ctrl.svc.perms.Get(r.TeamID, r.Scope, r.Resource)
}
func (ctrl *Permissions) SetTeam(ctx context.Context, r *request.PermissionsSetTeam) (interface{}, error) {
return ctrl.svc.perms.Set(r.Team, r.Permissions)
func (ctrl *Permissions) SetTeam(ctx context.Context, r *request.PermissionsSet) (interface{}, error) {
return ctrl.svc.perms.Set(r.TeamID, r.Permissions)
}

View File

@@ -71,18 +71,18 @@ func (p *PermissionsList) Fill(r *http.Request) (err error) {
var _ RequestFiller = NewPermissionsList()
// Permissions getTeam request parameters
type PermissionsGetTeam struct {
// Permissions get request parameters
type PermissionsGet struct {
Scope string
Resource string
Team string
TeamID uint64 `json:",string"`
}
func NewPermissionsGetTeam() *PermissionsGetTeam {
return &PermissionsGetTeam{}
func NewPermissionsGet() *PermissionsGet {
return &PermissionsGet{}
}
func (p *PermissionsGetTeam) Fill(r *http.Request) (err error) {
func (p *PermissionsGet) Fill(r *http.Request) (err error) {
if strings.ToLower(r.Header.Get("content-type")) == "application/json" {
err = json.NewDecoder(r.Body).Decode(p)
@@ -117,24 +117,24 @@ func (p *PermissionsGetTeam) Fill(r *http.Request) (err error) {
p.Resource = val
}
p.Team = chi.URLParam(r, "team")
p.TeamID = parseUInt64(chi.URLParam(r, "teamID"))
return err
}
var _ RequestFiller = NewPermissionsGetTeam()
var _ RequestFiller = NewPermissionsGet()
// Permissions setTeam request parameters
type PermissionsSetTeam struct {
Team string
Permissions []rules.Permission
// Permissions set request parameters
type PermissionsSet struct {
TeamID uint64 `json:",string"`
Permissions []rules.Rules
}
func NewPermissionsSetTeam() *PermissionsSetTeam {
return &PermissionsSetTeam{}
func NewPermissionsSet() *PermissionsSet {
return &PermissionsSet{}
}
func (p *PermissionsSetTeam) Fill(r *http.Request) (err error) {
func (p *PermissionsSet) Fill(r *http.Request) (err error) {
if strings.ToLower(r.Header.Get("content-type")) == "application/json" {
err = json.NewDecoder(r.Body).Decode(p)
@@ -161,9 +161,9 @@ func (p *PermissionsSetTeam) Fill(r *http.Request) (err error) {
post[name] = string(param[0])
}
p.Team = chi.URLParam(r, "team")
p.TeamID = parseUInt64(chi.URLParam(r, "teamID"))
return err
}
var _ RequestFiller = NewPermissionsSetTeam()
var _ RequestFiller = NewPermissionsSet()

View File

@@ -21,8 +21,8 @@ type (
With(ctx context.Context) PermissionsService
List() (interface{}, error)
Get(team string, scope string, resource string) (interface{}, error)
Set(team string, permissions []rules.Permission) (interface{}, error)
Get(teamID uint64, scope string, resource string) (interface{}, error)
Set(teamID uint64, rules []rules.Rules) (interface{}, error)
}
)
@@ -45,10 +45,10 @@ func (p *permissions) List() (interface{}, error) {
return p.scopes.List(), nil
}
func (p *permissions) Get(team string, scope string, resource string) (interface{}, error) {
func (p *permissions) Get(teamID uint64, scope string, resource string) (interface{}, error) {
return nil, errors.New("service.permissions.get: not implemented")
}
func (p *permissions) Set(team string, permissions []rules.Permission) (interface{}, error) {
func (p *permissions) Set(teamID uint64, rules []rules.Rules) (interface{}, error) {
return nil, errors.New("service.permissions.set: not implemented")
}

View File

@@ -18,40 +18,40 @@ func (*Channel) Permissions() []rules.OperationGroup {
},
},
}, rules.OperationGroup{
Title: "Text Permissions",
Title: "Message Permissions",
Operations: []rules.Operation{
rules.Operation{
Key: "text.send",
Key: "message.send",
Title: "Send Messages",
Subtitle: "",
Enabled: true,
Default: rules.Inherit,
}, rules.Operation{
Key: "text.embed",
Key: "message.embed",
Title: "Embed Links",
Subtitle: "",
Enabled: true,
Default: rules.Inherit,
}, rules.Operation{
Key: "text.attach",
Key: "message.attach",
Title: "Attach Files",
Subtitle: "",
Enabled: true,
Default: rules.Inherit,
}, rules.Operation{
Key: "text.edit_own",
Title: "Manage own messages",
Subtitle: "Members with this permission can edit/delete their own messages inside this channel",
Key: "message.update_own",
Title: "Update own messages",
Subtitle: "Members with this permission can update/delete their own messages inside this channel",
Enabled: true,
Default: rules.Inherit,
}, rules.Operation{
Key: "text.edit_all",
Title: "Manage messages",
Subtitle: "Members with this permission can edit/delete messages inside this channel",
Key: "message.update_all",
Title: "Update messages",
Subtitle: "Members with this permission can update/delete messages inside this channel",
Enabled: true,
Default: rules.Inherit,
}, rules.Operation{
Key: "text.react",
Key: "message.react",
Title: "Manage reactions",
Subtitle: "Members with this permission can add new reactions to a message",
Enabled: true,
@@ -64,13 +64,13 @@ func (*Channel) Permissions() []rules.OperationGroup {
func (*Channel) PermissionDefault(key string) rules.Access {
values := map[string]rules.Access{
"text.attach": rules.Inherit,
"text.edit_own": rules.Inherit,
"text.edit_all": rules.Inherit,
"text.react": rules.Inherit,
"manage.webhooks": rules.Inherit,
"text.send": rules.Inherit,
"text.embed": rules.Inherit,
"message.react": rules.Inherit,
"manage.webhooks": rules.Inherit,
"message.send": rules.Inherit,
"message.embed": rules.Inherit,
"message.attach": rules.Inherit,
"message.update_own": rules.Inherit,
"message.update_all": rules.Inherit,
}
if value, ok := values[key]; ok {
return value

View File

@@ -48,40 +48,40 @@ func (*Organisation) Permissions() []rules.OperationGroup {
},
},
}, rules.OperationGroup{
Title: "Text Permissions",
Title: "Message Permissions",
Operations: []rules.Operation{
rules.Operation{
Key: "text.send",
Key: "message.send",
Title: "Send Messages",
Subtitle: "",
Enabled: true,
Default: rules.Allow,
}, rules.Operation{
Key: "text.embed",
Key: "message.embed",
Title: "Embed Links",
Subtitle: "",
Enabled: true,
Default: rules.Allow,
}, rules.Operation{
Key: "text.attach",
Key: "message.attach",
Title: "Attach Files",
Subtitle: "",
Enabled: true,
Default: rules.Allow,
}, rules.Operation{
Key: "text.edit_own",
Title: "Manage own messages",
Subtitle: "Members with this permission can edit/delete their own messages inside channels",
Key: "message.update_own",
Title: "Update own messages",
Subtitle: "Members with this permission can update/delete their own messages inside channels",
Enabled: true,
Default: rules.Allow,
}, rules.Operation{
Key: "text.edit_all",
Title: "Manage messages",
Subtitle: "Members with this permission can edit/delete messages inside channels",
Key: "message.update_all",
Title: "Update messages",
Subtitle: "Members with this permission can update/delete messages inside channels",
Enabled: true,
Default: rules.Deny,
}, rules.Operation{
Key: "text.react",
Key: "message.react",
Title: "Manage reactions",
Subtitle: "Members with this permission can add new reactions to a message",
Enabled: true,
@@ -96,16 +96,16 @@ func (*Organisation) PermissionDefault(key string) rules.Access {
values := map[string]rules.Access{
"audit": rules.Deny,
"manage.organisation": rules.Deny,
"manage.webhooks": rules.Deny,
"text.embed": rules.Allow,
"text.edit_own": rules.Allow,
"text.react": rules.Allow,
"admin": rules.Deny,
"manage.roles": rules.Deny,
"message.send": rules.Allow,
"message.embed": rules.Allow,
"message.attach": rules.Allow,
"admin": rules.Deny,
"manage.channels": rules.Deny,
"text.send": rules.Allow,
"text.attach": rules.Allow,
"text.edit_all": rules.Deny,
"manage.webhooks": rules.Deny,
"message.update_own": rules.Allow,
"message.update_all": rules.Deny,
"message.react": rules.Allow,
}
if value, ok := values[key]; ok {
return value

View File

@@ -47,42 +47,42 @@
]
},
{
"title": "Text Permissions",
"title": "Message Permissions",
"operations": [
{
"key": "text.send",
"key": "message.send",
"title": "Send Messages",
"enabled": true,
"default": "allow"
},
{
"key": "text.embed",
"key": "message.embed",
"title": "Embed Links",
"enabled": true,
"default": "allow"
},
{
"key": "text.attach",
"key": "message.attach",
"title": "Attach Files",
"enabled": true,
"default": "allow"
},
{
"key": "text.edit_own",
"title": "Manage own messages",
"subtitle": "Members with this permission can edit/delete their own messages inside channels",
"key": "message.update_own",
"title": "Update own messages",
"subtitle": "Members with this permission can update/delete their own messages inside channels",
"enabled": true,
"default": "allow"
},
{
"key": "text.edit_all",
"title": "Manage messages",
"subtitle": "Members with this permission can edit/delete messages inside channels",
"key": "message.update_all",
"title": "Update messages",
"subtitle": "Members with this permission can update/delete messages inside channels",
"enabled": true,
"default": "deny"
},
{
"key": "text.react",
"key": "message.react",
"title": "Manage reactions",
"subtitle": "Members with this permission can add new reactions to a message",
"enabled": true,

View File

@@ -11,37 +11,37 @@
]
},
{
"title": "Text Permissions",
"title": "Message Permissions",
"operations": [
{
"key": "text.send",
"key": "message.send",
"title": "Send Messages",
"enabled": true
},
{
"key": "text.embed",
"key": "message.embed",
"title": "Embed Links",
"enabled": true
},
{
"key": "text.attach",
"key": "message.attach",
"title": "Attach Files",
"enabled": true
},
{
"key": "text.edit_own",
"title": "Manage own messages",
"subtitle": "Members with this permission can edit/delete their own messages inside channels",
"key": "message.update_own",
"title": "Update own messages",
"subtitle": "Members with this permission can update/delete their own messages inside channels",
"enabled": true
},
{
"key": "text.edit_all",
"title": "Manage messages",
"subtitle": "Members with this permission can edit/delete messages inside channels",
"key": "message.update_all",
"title": "Update messages",
"subtitle": "Members with this permission can update/delete messages inside channels",
"enabled": true
},
{
"key": "text.react",
"key": "message.react",
"title": "Manage reactions",
"subtitle": "Members with this permission can add new reactions to a message",
"enabled": true

View File

@@ -11,37 +11,37 @@
]
},
{
"title": "Text Permissions",
"title": "Message Permissions",
"operations": [
{
"key": "text.send",
"key": "message.send",
"title": "Send Messages",
"enabled": true
},
{
"key": "text.embed",
"key": "message.embed",
"title": "Embed Links",
"enabled": true
},
{
"key": "text.attach",
"key": "message.attach",
"title": "Attach Files",
"enabled": true
},
{
"key": "text.edit_own",
"title": "Manage own messages",
"subtitle": "Members with this permission can edit/delete their own messages inside this channel",
"key": "message.update_own",
"title": "Update own messages",
"subtitle": "Members with this permission can update/delete their own messages inside this channel",
"enabled": true
},
{
"key": "text.edit_all",
"title": "Manage messages",
"subtitle": "Members with this permission can edit/delete messages inside this channel",
"key": "message.update_all",
"title": "Update messages",
"subtitle": "Members with this permission can update/delete messages inside this channel",
"enabled": true
},
{
"key": "text.react",
"key": "message.react",
"title": "Manage reactions",
"subtitle": "Members with this permission can add new reactions to a message",
"enabled": true

View File

@@ -18,40 +18,40 @@ func (*Team) Permissions() []rules.OperationGroup {
},
},
}, rules.OperationGroup{
Title: "Text Permissions",
Title: "Message Permissions",
Operations: []rules.Operation{
rules.Operation{
Key: "text.send",
Key: "message.send",
Title: "Send Messages",
Subtitle: "",
Enabled: true,
Default: rules.Inherit,
}, rules.Operation{
Key: "text.embed",
Key: "message.embed",
Title: "Embed Links",
Subtitle: "",
Enabled: true,
Default: rules.Inherit,
}, rules.Operation{
Key: "text.attach",
Key: "message.attach",
Title: "Attach Files",
Subtitle: "",
Enabled: true,
Default: rules.Inherit,
}, rules.Operation{
Key: "text.edit_own",
Title: "Manage own messages",
Subtitle: "Members with this permission can edit/delete their own messages inside channels",
Key: "message.update_own",
Title: "Update own messages",
Subtitle: "Members with this permission can update/delete their own messages inside channels",
Enabled: true,
Default: rules.Inherit,
}, rules.Operation{
Key: "text.edit_all",
Title: "Manage messages",
Subtitle: "Members with this permission can edit/delete messages inside channels",
Key: "message.update_all",
Title: "Update messages",
Subtitle: "Members with this permission can update/delete messages inside channels",
Enabled: true,
Default: rules.Inherit,
}, rules.Operation{
Key: "text.react",
Key: "message.react",
Title: "Manage reactions",
Subtitle: "Members with this permission can add new reactions to a message",
Enabled: true,
@@ -64,13 +64,13 @@ func (*Team) Permissions() []rules.OperationGroup {
func (*Team) PermissionDefault(key string) rules.Access {
values := map[string]rules.Access{
"text.edit_all": rules.Inherit,
"text.react": rules.Inherit,
"manage.webhooks": rules.Inherit,
"text.send": rules.Inherit,
"text.embed": rules.Inherit,
"text.attach": rules.Inherit,
"text.edit_own": rules.Inherit,
"manage.webhooks": rules.Inherit,
"message.send": rules.Inherit,
"message.embed": rules.Inherit,
"message.attach": rules.Inherit,
"message.update_own": rules.Inherit,
"message.update_all": rules.Inherit,
"message.react": rules.Inherit,
}
if value, ok := values[key]; ok {
return value