Admin: Group action to add / remove application run rights

This commit is contained in:
nathan 2023-11-02 13:08:02 -06:00
parent ba04abd1b4
commit 8544a807e3
3 changed files with 86 additions and 1 deletions

View File

@ -260,6 +260,13 @@ class admin_ui
'group' => 2,
'allowOnMultiple' => false
),
'run_rights' => array(
'onExecute' => 'javaScript:app.admin.group_run_rights',
'caption' => 'Run rights for applications',
'icon' => 'lock',
'group' => 2,
'allowOnMultiple' => true
)
);
if (!$GLOBALS['egw']->acl->check('account_access',64,'admin')) // no rights to set ACL-rights
{

View File

@ -20,7 +20,10 @@ import {egwAction, egwActionObject} from '../../api/js/egw_action/egw_action';
import {LitElement} from "@lion/core";
import {et2_nextmatch} from "../../api/js/etemplate/et2_extension_nextmatch";
import {et2_DOMWidget} from "../../api/js/etemplate/et2_core_DOMWidget";
import {Et2SelectAccount} from "../../api/js/etemplate/Et2Select/Et2SelectAccount";
import {Et2SelectAccount} from "../../api/js/etemplate/Et2Select/Select/Et2SelectAccount";
import {EgwAction} from "../../api/js/egw_action/EgwAction";
import {EgwActionObject} from "../../api/js/egw_action/EgwActionObject";
import type {Et2Button} from "../../api/js/etemplate/Et2Button/Et2Button";
/**
* UI for Admin
@ -550,6 +553,61 @@ class AdminApp extends EgwApp
}
}
/**
* Opens a dialog to add / remove application run rights for one or more groups
*
* @param _action
* @param _senders
*/
group_run_rights(_action : EgwAction, _senders : EgwActionObject[])
{
let ids = [];
let row_ids = []
_senders.forEach((sender) => {
row_ids.push(sender.id);
ids.push(sender.id.split("::").pop());
})
const dialog = new Et2Dialog(this.egw);
let attrs = {
template: this.egw.webserverUrl + "/admin/templates/default/group.run_rights.xet",
title: "Applications",
hideOnEscape: true,
width: "400",
height: "300px",
value: {
content: {groups: ids}
},
callback: (button_id, value) => {
if(button_id == "_cancel") return;
let acl_id = [];
(value.apps ?? []).forEach(app => {
ids.forEach(account => {
acl_id.push(app + ":" + account +":run");
})
});
if(value && value.apps && acl_id.length)
{
const button = <Et2Button>dialog.querySelector("[id*='"+button_id+"']");
if(button) button.disabled=true;
this.egw.request(
'admin_acl::ajax_change_acl',
[acl_id, button_id == "_add" ? 1 : 0, [], this.et2.getInstanceManager().etemplate_exec_id]
).then((_data) => {
this.et2.getInstanceManager().refresh(_data.msg, this.appname,row_ids,'update');
dialog.close();
});
return false;
}
}
}
dialog.transformAttributes(attrs);
this.et2.getInstanceManager().DOMContainer.appendChild(dialog);
dialog.updateComplete.then(() => {
dialog.template.widgetContainer.getWidgetById("apps").focus();
});
}
/**
* Modify an ACL entry
*

View File

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE overlay PUBLIC "-//EGroupware GmbH//eTemplate 2.0//EN" "https://www.egroupware.org/etemplate2.0.dtd">
<overlay>
<template id="admin.group.run_rights" template="" lang="" group="0" version="23.001">
<et2-vbox>
<et2-select-account id="groups" readonly="true" multiple="true" rows="8"></et2-select-account>
<et2-select-app id="apps" rows="8" multiple="1" autofocus="true"></et2-select-app>
</et2-vbox>
<et2-button id="add" slot="buttons" label="Add" noSubmit="true"></et2-button>
<et2-button id="remove" slot="buttons" image="minus" label="Remove" noSubmit="true"></et2-button>
<et2-button id="cancel" slot="buttons" align="right" label="Cancel" noSubmit="true"></et2-button>
<styles>
#_groups {
max-height: 8em;
overflow-y: auto;
flex-grow: 2;
}
</styles>
</template>
</overlay>