Skip to content

Commit 6e47ede

Browse files
committed
feat: assign messengers to list roles
1 parent 4cd1bf4 commit 6e47ede

File tree

4 files changed

+26
-3
lines changed

4 files changed

+26
-3
lines changed

cmd/roles.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,11 @@ func (a *App) validateListRole(r auth.ListRole) error {
182182
if !strHasLen(r.Name.String, 1, stdInputMaxLen) {
183183
return echo.NewHTTPError(http.StatusBadRequest, a.i18n.Ts("globals.messages.invalidFields", "name", "name"))
184184
}
185+
for _, p := range r.Messengers {
186+
if !strHasLen(p, 1, stdInputMaxLen) {
187+
return echo.NewHTTPError(http.StatusBadRequest, a.i18n.Ts("globals.messages.invalidFields", "name", fmt.Sprintf("messenger: %s", p)))
188+
}
189+
}
185190

186191
for _, l := range r.Lists {
187192
for _, p := range l.Permissions {

frontend/src/views/RoleForm.vue

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,12 @@
7272
</a>
7373
</b-table-column>
7474
</b-table>
75+
76+
<b-table :data="allMessengers" :checked-rows.sync="form.messengers" checkbox-position="right" checkable>
77+
<b-table-column v-slot="props" field="id" :label="$t('globals.terms.messengers')">
78+
{{ props.row.id }}
79+
</b-table-column>
80+
</b-table>
7581
</div>
7682

7783
<template v-if="type === 'user'">
@@ -142,8 +148,10 @@ export default Vue.extend({
142148
curList: null,
143149
lists: [],
144150
name: null,
151+
messengers: [],
145152
permissions: {},
146153
},
154+
allMessengers: [],
147155
hasToggle: false,
148156
disabled: false,
149157
};
@@ -195,6 +203,7 @@ export default Vue.extend({
195203
form.permissions = this.form.permissions;
196204
} else {
197205
fn = this.$api.createListRole;
206+
form.messengers = this.form.messengers.map(({ id }) => id);
198207
form.lists = this.form.lists.reduce((acc, item) => {
199208
acc.push({ id: item.id, permissions: item.permissions });
200209
return acc;
@@ -217,6 +226,7 @@ export default Vue.extend({
217226
form.permissions = this.form.permissions;
218227
} else {
219228
fn = this.$api.updateListRole;
229+
form.messengers = this.form.messengers.map(({ id }) => id);
220230
form.lists = this.form.lists.reduce((acc, item) => {
221231
acc.push({ id: item.id, permissions: item.permissions });
222232
return acc;
@@ -247,8 +257,14 @@ export default Vue.extend({
247257
},
248258
249259
mounted() {
260+
this.allMessengers.push(...this.serverConfig.messengers.map((id) => ({ id })));
250261
if (this.isEditing) {
251262
this.form = { ...this.form, ...this.$props.data };
263+
this.form.messengers = [...this.allMessengers];
264+
if (this.$props.data.messengers !== null) {
265+
this.form.messengers = this.form.messengers
266+
.filter(({ id }) => this.$props.data.messengers.includes(id));
267+
}
252268
253269
// It's the superadmin role. Disable the form.
254270
if (this.$props.data.id === 1 || !this.$can('roles:manage')) {
@@ -264,6 +280,7 @@ export default Vue.extend({
264280
'campaigns:get_all',
265281
'campaigns:manage_all',
266282
];
283+
this.form.messengers = [...this.allMessengers];
267284
this.form.permissions = this.serverConfig.permissions.reduce((acc, item) => {
268285
if (disabledGroups.includes(item.group)) return acc;
269286
item.permissions.forEach((p) => {

internal/auth/models.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,8 @@ type Role struct {
147147
type ListRole struct {
148148
Base
149149

150-
Name null.String `db:"name" json:"name"`
150+
Name null.String `db:"name" json:"name"`
151+
Messengers pq.StringArray `db:"permissions" json:"messengers"`
151152

152153
ListID null.Int `db:"list_id" json:"-"`
153154
ParentID null.Int `db:"parent_id" json:"-"`

internal/core/roles.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ func (c *Core) CreateRole(r auth.Role) (auth.Role, error) {
7575
func (c *Core) CreateListRole(r auth.ListRole) (auth.ListRole, error) {
7676
var out auth.ListRole
7777

78-
if err := c.q.CreateRole.Get(&out, r.Name, auth.RoleTypeList, pq.Array([]string{})); err != nil {
78+
if err := c.q.CreateRole.Get(&out, r.Name, auth.RoleTypeList, pq.Array(r.Messengers)); err != nil {
7979
return out, echo.NewHTTPError(http.StatusInternalServerError,
8080
c.i18n.Ts("globals.messages.errorCreating", "name", "{users.role}", "error", pqErrMsg(err)))
8181
}
@@ -149,7 +149,7 @@ func (c *Core) UpdateUserRole(id int, r auth.Role) (auth.Role, error) {
149149
func (c *Core) UpdateListRole(id int, r auth.ListRole) (auth.ListRole, error) {
150150
var out auth.ListRole
151151

152-
if err := c.q.UpdateRole.Get(&out, id, r.Name, pq.Array([]string{})); err != nil {
152+
if err := c.q.UpdateRole.Get(&out, id, r.Name, pq.Array(r.Messengers)); err != nil {
153153
return out, echo.NewHTTPError(http.StatusInternalServerError,
154154
c.i18n.Ts("globals.messages.errorUpdating", "name", "{users.listRole}", "error", pqErrMsg(err)))
155155
}

0 commit comments

Comments
 (0)