From f155f48bdf64403a65e06c1413f333050f571aed Mon Sep 17 00:00:00 2001 From: Mitja Zivkovic Date: Tue, 12 Feb 2019 21:10:16 +0100 Subject: [PATCH] upd(messaging): permissions to rules --- api/messaging/spec.json | 20 +++++----- api/messaging/spec/permissions.json | 20 +++++----- docs/messaging/README.md | 10 ++--- internal/rules/operations.go | 11 ------ messaging/rest/handlers/permissions.go | 26 ++++++------- messaging/rest/permissions.go | 8 ++-- messaging/rest/request/permissions.go | 34 ++++++++--------- messaging/service/permissions.go | 8 ++-- messaging/types/channel.perms.gen.go | 36 +++++++++--------- messaging/types/organisation.perms.gen.go | 38 +++++++++---------- .../types/permissions/1-organisation.json | 22 +++++------ messaging/types/permissions/2-team.json | 22 +++++------ messaging/types/permissions/3-channel.json | 22 +++++------ messaging/types/team.perms.gen.go | 36 +++++++++--------- 14 files changed, 151 insertions(+), 162 deletions(-) diff --git a/api/messaging/spec.json b/api/messaging/spec.json index eb5ef8a39..8ea835fa4 100644 --- a/api/messaging/spec.json +++ b/api/messaging/spec.json @@ -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" } ] } diff --git a/api/messaging/spec/permissions.json b/api/messaging/spec/permissions.json index 1441524de..63b8eea09 100644 --- a/api/messaging/spec/permissions.json +++ b/api/messaging/spec/permissions.json @@ -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" } ] } diff --git a/docs/messaging/README.md b/docs/messaging/README.md index 0e8a3c7b9..5daeec74d 100644 --- a/docs/messaging/README.md +++ b/docs/messaging/README.md @@ -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 | diff --git a/internal/rules/operations.go b/internal/rules/operations.go index a30d44eb3..039028ff4 100644 --- a/internal/rules/operations.go +++ b/internal/rules/operations.go @@ -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"` - } ) diff --git a/messaging/rest/handlers/permissions.go b/messaging/rest/handlers/permissions.go index c5ee128b5..25f6d6812 100644 --- a/messaging/rest/handlers/permissions.go +++ b/messaging/rest/handlers/permissions.go @@ -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) }) }) } diff --git a/messaging/rest/permissions.go b/messaging/rest/permissions.go index 160f95376..45efeefe7 100644 --- a/messaging/rest/permissions.go +++ b/messaging/rest/permissions.go @@ -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) } diff --git a/messaging/rest/request/permissions.go b/messaging/rest/request/permissions.go index 0bee19f1a..1aebb3c9f 100644 --- a/messaging/rest/request/permissions.go +++ b/messaging/rest/request/permissions.go @@ -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() diff --git a/messaging/service/permissions.go b/messaging/service/permissions.go index c6e136854..f76bd0ccd 100644 --- a/messaging/service/permissions.go +++ b/messaging/service/permissions.go @@ -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") } diff --git a/messaging/types/channel.perms.gen.go b/messaging/types/channel.perms.gen.go index 2ec4fb14e..436d41e3a 100644 --- a/messaging/types/channel.perms.gen.go +++ b/messaging/types/channel.perms.gen.go @@ -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 diff --git a/messaging/types/organisation.perms.gen.go b/messaging/types/organisation.perms.gen.go index 946644f0a..2d4762aaf 100644 --- a/messaging/types/organisation.perms.gen.go +++ b/messaging/types/organisation.perms.gen.go @@ -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 diff --git a/messaging/types/permissions/1-organisation.json b/messaging/types/permissions/1-organisation.json index 3a1ba1c62..7ca206b79 100644 --- a/messaging/types/permissions/1-organisation.json +++ b/messaging/types/permissions/1-organisation.json @@ -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, diff --git a/messaging/types/permissions/2-team.json b/messaging/types/permissions/2-team.json index 2b19db94f..908736e34 100644 --- a/messaging/types/permissions/2-team.json +++ b/messaging/types/permissions/2-team.json @@ -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 diff --git a/messaging/types/permissions/3-channel.json b/messaging/types/permissions/3-channel.json index 7fde93be3..fea1d4b38 100644 --- a/messaging/types/permissions/3-channel.json +++ b/messaging/types/permissions/3-channel.json @@ -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 diff --git a/messaging/types/team.perms.gen.go b/messaging/types/team.perms.gen.go index a0b31d2c8..78843ffc8 100644 --- a/messaging/types/team.perms.gen.go +++ b/messaging/types/team.perms.gen.go @@ -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