mirror of
https://github.com/flarum/core.git
synced 2025-08-12 19:34:18 +02:00
update: admin/components/PermissionDropdown
This commit is contained in:
committed by
Franz Liedke
parent
f611a44a08
commit
f9b1dfe499
@@ -32,101 +32,109 @@ function filterByRequiredPermissions(groupIds, permission) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export default class PermissionDropdown extends Dropdown {
|
export default class PermissionDropdown extends Dropdown {
|
||||||
static initProps(props) {
|
initAttrs(attrs) {
|
||||||
super.initProps(props);
|
super.initAttrs(attrs);
|
||||||
|
|
||||||
props.className = 'PermissionDropdown';
|
attrs.className = 'PermissionDropdown';
|
||||||
props.buttonClassName = 'Button Button--text';
|
attrs.buttonClassName = 'Button Button--text';
|
||||||
}
|
}
|
||||||
|
|
||||||
view() {
|
view(vnode) {
|
||||||
this.props.children = [];
|
vnode.children = [];
|
||||||
|
|
||||||
let groupIds = app.data.permissions[this.props.permission] || [];
|
let groupIds = app.data.permissions[this.attrs.permission] || [];
|
||||||
|
|
||||||
groupIds = filterByRequiredPermissions(groupIds, this.props.permission);
|
groupIds = filterByRequiredPermissions(groupIds, this.attrs.permission);
|
||||||
|
|
||||||
const everyone = groupIds.indexOf(Group.GUEST_ID) !== -1;
|
const everyone = groupIds.indexOf(Group.GUEST_ID) !== -1;
|
||||||
const members = groupIds.indexOf(Group.MEMBER_ID) !== -1;
|
const members = groupIds.indexOf(Group.MEMBER_ID) !== -1;
|
||||||
const adminGroup = app.store.getById('groups', Group.ADMINISTRATOR_ID);
|
const adminGroup = app.store.getById('groups', Group.ADMINISTRATOR_ID);
|
||||||
|
|
||||||
if (everyone) {
|
if (everyone) {
|
||||||
this.props.label = Badge.component({ icon: 'fas fa-globe' });
|
this.attrs.label = Badge.component({ icon: 'fas fa-globe' });
|
||||||
} else if (members) {
|
} else if (members) {
|
||||||
this.props.label = Badge.component({ icon: 'fas fa-user' });
|
this.attrs.label = Badge.component({ icon: 'fas fa-user' });
|
||||||
} else {
|
} else {
|
||||||
this.props.label = [badgeForId(Group.ADMINISTRATOR_ID), groupIds.map(badgeForId)];
|
this.attrs.label = [badgeForId(Group.ADMINISTRATOR_ID), groupIds.map(badgeForId)];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.showing) {
|
if (this.showing) {
|
||||||
if (this.props.allowGuest) {
|
if (this.attrs.allowGuest) {
|
||||||
this.props.children.push(
|
vnode.children.push(
|
||||||
Button.component({
|
Button.component(
|
||||||
children: [Badge.component({ icon: 'fas fa-globe' }), ' ', app.translator.trans('core.admin.permissions_controls.everyone_button')],
|
{
|
||||||
icon: everyone ? 'fas fa-check' : true,
|
icon: everyone ? 'fas fa-check' : true,
|
||||||
onclick: () => this.save([Group.GUEST_ID]),
|
onclick: () => this.save([Group.GUEST_ID]),
|
||||||
disabled: this.isGroupDisabled(Group.GUEST_ID),
|
disabled: this.isGroupDisabled(Group.GUEST_ID),
|
||||||
})
|
},
|
||||||
|
[Badge.component({ icon: 'fas fa-globe' }), ' ', app.translator.trans('core.admin.permissions_controls.everyone_button')]
|
||||||
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
this.props.children.push(
|
vnode.children.push(
|
||||||
Button.component({
|
Button.component(
|
||||||
children: [Badge.component({ icon: 'fas fa-user' }), ' ', app.translator.trans('core.admin.permissions_controls.members_button')],
|
{
|
||||||
icon: members ? 'fas fa-check' : true,
|
icon: members ? 'fas fa-check' : true,
|
||||||
onclick: () => this.save([Group.MEMBER_ID]),
|
onclick: () => this.save([Group.MEMBER_ID]),
|
||||||
disabled: this.isGroupDisabled(Group.MEMBER_ID),
|
disabled: this.isGroupDisabled(Group.MEMBER_ID),
|
||||||
}),
|
},
|
||||||
|
[Badge.component({ icon: 'fas fa-user' }), ' ', app.translator.trans('core.admin.permissions_controls.members_button')]
|
||||||
|
),
|
||||||
|
|
||||||
Separator.component(),
|
Separator.component(),
|
||||||
|
|
||||||
Button.component({
|
Button.component(
|
||||||
children: [badgeForId(adminGroup.id()), ' ', adminGroup.namePlural()],
|
{
|
||||||
icon: !everyone && !members ? 'fas fa-check' : true,
|
icon: !everyone && !members ? 'fas fa-check' : true,
|
||||||
disabled: !everyone && !members,
|
disabled: !everyone && !members,
|
||||||
onclick: (e) => {
|
onclick: (e) => {
|
||||||
if (e.shiftKey) e.stopPropagation();
|
if (e.shiftKey) e.stopPropagation();
|
||||||
this.save([]);
|
this.save([]);
|
||||||
|
},
|
||||||
},
|
},
|
||||||
})
|
[badgeForId(adminGroup.id()), ' ', adminGroup.namePlural()]
|
||||||
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
[].push.apply(
|
[].push.apply(
|
||||||
this.props.children,
|
vnode.children,
|
||||||
app.store
|
app.store
|
||||||
.all('groups')
|
.all('groups')
|
||||||
.filter((group) => [Group.ADMINISTRATOR_ID, Group.GUEST_ID, Group.MEMBER_ID].indexOf(group.id()) === -1)
|
.filter((group) => [Group.ADMINISTRATOR_ID, Group.GUEST_ID, Group.MEMBER_ID].indexOf(group.id()) === -1)
|
||||||
.map((group) =>
|
.map((group) =>
|
||||||
Button.component({
|
Button.component(
|
||||||
children: [badgeForId(group.id()), ' ', group.namePlural()],
|
{
|
||||||
icon: groupIds.indexOf(group.id()) !== -1 ? 'fas fa-check' : true,
|
icon: groupIds.indexOf(group.id()) !== -1 ? 'fas fa-check' : true,
|
||||||
onclick: (e) => {
|
onclick: (e) => {
|
||||||
if (e.shiftKey) e.stopPropagation();
|
if (e.shiftKey) e.stopPropagation();
|
||||||
this.toggle(group.id());
|
this.toggle(group.id());
|
||||||
|
},
|
||||||
|
disabled: this.isGroupDisabled(group.id()) && this.isGroupDisabled(Group.MEMBER_ID) && this.isGroupDisabled(Group.GUEST_ID),
|
||||||
},
|
},
|
||||||
disabled: this.isGroupDisabled(group.id()) && this.isGroupDisabled(Group.MEMBER_ID) && this.isGroupDisabled(Group.GUEST_ID),
|
[badgeForId(group.id()), ' ', group.namePlural()]
|
||||||
})
|
)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
return super.view();
|
return super.view(vnode);
|
||||||
}
|
}
|
||||||
|
|
||||||
save(groupIds) {
|
save(groupIds) {
|
||||||
const permission = this.props.permission;
|
const permission = this.attrs.permission;
|
||||||
|
|
||||||
app.data.permissions[permission] = groupIds;
|
app.data.permissions[permission] = groupIds;
|
||||||
|
|
||||||
app.request({
|
app.request({
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
url: app.forum.attribute('apiUrl') + '/permission',
|
url: app.forum.attribute('apiUrl') + '/permission',
|
||||||
data: { permission, groupIds },
|
body: { permission, groupIds },
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
toggle(groupId) {
|
toggle(groupId) {
|
||||||
const permission = this.props.permission;
|
const permission = this.attrs.permission;
|
||||||
|
|
||||||
let groupIds = app.data.permissions[permission] || [];
|
let groupIds = app.data.permissions[permission] || [];
|
||||||
|
|
||||||
@@ -143,6 +151,6 @@ export default class PermissionDropdown extends Dropdown {
|
|||||||
}
|
}
|
||||||
|
|
||||||
isGroupDisabled(id) {
|
isGroupDisabled(id) {
|
||||||
return filterByRequiredPermissions([id], this.props.permission).indexOf(id) === -1;
|
return filterByRequiredPermissions([id], this.attrs.permission).indexOf(id) === -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user