mirror of
https://gitlab.com/comunic/comunicconsole
synced 2024-11-27 07:49:22 +00:00
Can toggle admin role
This commit is contained in:
parent
3ef0006c17
commit
f38b4d663b
@ -23,4 +23,22 @@ export class AdminRolesHelper {
|
|||||||
static async LoadRolesList() {
|
static async LoadRolesList() {
|
||||||
RolesList = await serverRequest("roles/list");
|
RolesList = await serverRequest("roles/list");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Toggle a role for an administrator
|
||||||
|
*
|
||||||
|
* @param adminID Target administrator ID
|
||||||
|
* @param role The role to toggle
|
||||||
|
*/
|
||||||
|
static async ToggleAdminRole(
|
||||||
|
adminID: number,
|
||||||
|
role: AdminRole,
|
||||||
|
enable: boolean
|
||||||
|
) {
|
||||||
|
await serverRequest("roles/toggle", {
|
||||||
|
adminID: adminID,
|
||||||
|
role: role.id,
|
||||||
|
enable: enable,
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,15 +4,74 @@
|
|||||||
* @author Pierre Hubert
|
* @author Pierre Hubert
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import { Checkbox, FormControlLabel, Tooltip } from "@material-ui/core";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
import { AdminAccount } from "../../helpers/AccountHelper";
|
import { AdminAccount } from "../../helpers/AccountHelper";
|
||||||
|
import {
|
||||||
|
AdminRole,
|
||||||
|
AdminRolesHelper,
|
||||||
|
RolesList,
|
||||||
|
} from "../../helpers/AdminRolesHelper";
|
||||||
|
import { matAlert, snackbar } from "../widgets/DialogsProvider";
|
||||||
import { SettingsSection } from "./SettingsSection";
|
import { SettingsSection } from "./SettingsSection";
|
||||||
|
|
||||||
export class RoleSettingsSection extends React.Component<{
|
export class RoleSettingsSection extends React.Component<{
|
||||||
admin: AdminAccount;
|
admin: AdminAccount;
|
||||||
editable: boolean;
|
editable: boolean;
|
||||||
|
onChanged: () => void;
|
||||||
}> {
|
}> {
|
||||||
|
constructor(p: any) {
|
||||||
|
super(p);
|
||||||
|
|
||||||
|
this.toggleRole = this.toggleRole.bind(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
async toggleRole(r: AdminRole, enable: boolean) {
|
||||||
|
try {
|
||||||
|
await AdminRolesHelper.ToggleAdminRole(
|
||||||
|
this.props.admin.id,
|
||||||
|
r,
|
||||||
|
enable
|
||||||
|
);
|
||||||
|
this.props.onChanged();
|
||||||
|
snackbar("Administrator roles were successfully updated!");
|
||||||
|
} catch (e) {
|
||||||
|
console.error(e);
|
||||||
|
matAlert("Failed to update admin roles!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
return <SettingsSection title="Roles">Soon : roles</SettingsSection>;
|
return (
|
||||||
|
<SettingsSection title="Roles">
|
||||||
|
<div style={{ padding: "10px" }}>
|
||||||
|
{RolesList.map((r) => {
|
||||||
|
const hasRole = this.props.admin.roles.includes(
|
||||||
|
r.id as any
|
||||||
|
);
|
||||||
|
return (
|
||||||
|
<Tooltip
|
||||||
|
disableFocusListener
|
||||||
|
title={r.description}
|
||||||
|
placement="top"
|
||||||
|
key={r.id}
|
||||||
|
arrow
|
||||||
|
>
|
||||||
|
<FormControlLabel
|
||||||
|
disabled={!this.props.editable}
|
||||||
|
control={<Checkbox color="primary" />}
|
||||||
|
label={r.name}
|
||||||
|
checked={hasRole}
|
||||||
|
onChange={() =>
|
||||||
|
this.toggleRole(r, !hasRole)
|
||||||
|
}
|
||||||
|
style={{ display: "block" }}
|
||||||
|
></FormControlLabel>
|
||||||
|
</Tooltip>
|
||||||
|
);
|
||||||
|
})}
|
||||||
|
</div>
|
||||||
|
</SettingsSection>
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { Grid } from "@material-ui/core";
|
import { Grid } from "@material-ui/core";
|
||||||
|
import { version } from "process";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
import { useParams } from "react-router-dom";
|
import { useParams } from "react-router-dom";
|
||||||
import { AccountHelper, AdminAccount } from "../../helpers/AccountHelper";
|
import { AccountHelper, AdminAccount } from "../../helpers/AccountHelper";
|
||||||
@ -27,6 +28,7 @@ interface SettingsRouteProps {
|
|||||||
|
|
||||||
interface SettingsRouteState {
|
interface SettingsRouteState {
|
||||||
account: AdminAccount;
|
account: AdminAccount;
|
||||||
|
version: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
class AccountSettingsRouteInner extends React.Component<
|
class AccountSettingsRouteInner extends React.Component<
|
||||||
@ -38,6 +40,17 @@ class AccountSettingsRouteInner extends React.Component<
|
|||||||
|
|
||||||
this.load = this.load.bind(this);
|
this.load = this.load.bind(this);
|
||||||
this.build = this.build.bind(this);
|
this.build = this.build.bind(this);
|
||||||
|
|
||||||
|
this.state = {
|
||||||
|
account: {} as AdminAccount,
|
||||||
|
version: 1,
|
||||||
|
};
|
||||||
|
|
||||||
|
this.reload = this.reload.bind(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
reload() {
|
||||||
|
this.setState({ version: this.state.version + 1 });
|
||||||
}
|
}
|
||||||
|
|
||||||
async load() {
|
async load() {
|
||||||
@ -49,7 +62,7 @@ class AccountSettingsRouteInner extends React.Component<
|
|||||||
render() {
|
render() {
|
||||||
return (
|
return (
|
||||||
<AsyncWidget
|
<AsyncWidget
|
||||||
key={this.props.id}
|
key={this.props.id + "-" + this.state.version}
|
||||||
errorMessage="Failed to load admin information!"
|
errorMessage="Failed to load admin information!"
|
||||||
onBuild={this.build}
|
onBuild={this.build}
|
||||||
load={this.load}
|
load={this.load}
|
||||||
@ -65,11 +78,11 @@ class AccountSettingsRouteInner extends React.Component<
|
|||||||
<GeneralSettings
|
<GeneralSettings
|
||||||
admin={this.state.account}
|
admin={this.state.account}
|
||||||
editable={
|
editable={
|
||||||
this.props.id == adminID() || canManageAdmins()
|
this.props.id === adminID() || canManageAdmins()
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
{this.props.id == adminID() || canManageAdmins() ? (
|
{this.props.id === adminID() || canManageAdmins() ? (
|
||||||
<KeySettingsSection admin={this.state.account} />
|
<KeySettingsSection admin={this.state.account} />
|
||||||
) : (
|
) : (
|
||||||
<div></div>
|
<div></div>
|
||||||
@ -78,6 +91,7 @@ class AccountSettingsRouteInner extends React.Component<
|
|||||||
<RoleSettingsSection
|
<RoleSettingsSection
|
||||||
admin={this.state.account}
|
admin={this.state.account}
|
||||||
editable={canManageAdmins()}
|
editable={canManageAdmins()}
|
||||||
|
onChanged={this.reload}
|
||||||
/>
|
/>
|
||||||
</Grid>
|
</Grid>
|
||||||
</div>
|
</div>
|
||||||
|
Loading…
Reference in New Issue
Block a user