}
$permissionValue = [];
foreach (AdminGroupRbacConfig::find()->all() as $adminGroupRbacConfig) {
- $permissionValue[$adminGroupRbacConfig->admin_group_id] = explode(',', $adminGroupRbacConfig->config);
+ if ($adminGroupRbacConfig->admin_group_id < 1e+6) {
+ $permissionValue[$adminGroupRbacConfig->admin_group_id] = explode(',', $adminGroupRbacConfig->config);
+ }
};
return json_encode([
return 'ok';
}
}
- if ($action == 'updatePermissionConfigForAdminGroup') {
- $adminGroupId = Yii::$app->request->post("adminGroupId");
+ if ($action == 'updatePermissionConfigForAdminGroup' || $action == 'updatePermissionConfigForSingleAdmin') {
+ $adminGroupId = null;
+ if ($action == 'updatePermissionConfigForAdminGroup') {
+ $adminGroupId = Yii::$app->request->post("adminGroupId");
+ }
+ $adminId = null;
+ if ($action == 'updatePermissionConfigForSingleAdmin') {
+ $adminId = Yii::$app->request->post("adminId");
+ }
$configKey = Yii::$app->request->post("configKey");
$configValue = filter_var(Yii::$app->request->post("configValue"), FILTER_VALIDATE_BOOLEAN);
- $adminGroupRbacConfig = AdminGroupRbacConfig::findOne(['admin_group_id' => $adminGroupId]);
+ $adminGroupRbacConfig = AdminGroupRbacConfig::findOne(['admin_group_id' => $adminGroupId ?? ($adminId + 1e+6)]);
if (!$adminGroupRbacConfig) {
$adminGroupRbacConfig = new AdminGroupRbacConfig;
- $adminGroupRbacConfig->admin_group_id = $adminGroupId;
+ $adminGroupRbacConfig->admin_group_id = $adminGroupId ?? ($adminId + 1e+6);
$adminGroupRbacConfig->config = '';
}
$config = explode(',', $adminGroupRbacConfig->config);
return "ok";
}
+ if ($action == 'listPermissionConfigForSingleAdmins') {
+ Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
+
+ $configKey = Yii::$app->request->post("configKey");
+
+ $adminArr = [];
+ foreach (\yii_app\records\Admin::find()->with('adminGroup')->all() as $admin) {
+ if ($admin->group_id > 0) {
+ $adminArr[] = ['id' => $admin->id, 'name' => $admin->name, 'groupName' => $admin->adminGroup->name ?? "Другие"];
+ }
+ }
+ $admins = ArrayHelper::map($adminArr, 'id', 'name', 'groupName');
+
+ $adminsWithPermissionIds = [];
+
+ foreach (AdminGroupRbacConfig::find()->all() as $adminGroupRbacConfig) {
+ if ($adminGroupRbacConfig->admin_group_id > 1e+6 && in_array($configKey, explode(',', $adminGroupRbacConfig->config))) {
+ $adminsWithPermissionIds[] = $adminGroupRbacConfig->admin_group_id - (1e+6);
+ }
+ };
+
+ return compact('admins', 'adminsWithPermissionIds');
+ }
+
if ($action == 'initVisibilitySettingsDialog') {
$authMenuVisibilityPermissions = Yii::$app->session->get("authMenuVisibilityPermissions", true);
return $this->asJson(compact('authMenuVisibilityPermissions'));
+/* jshint esversion: 6 */
+
const param = $('meta[name=csrf-param]').attr('content');
const token = $('meta[name=csrf-token]').attr('content');
tbody.append(htr);
}
+ function filterAdminTable(e) {
+ const mask = e.target.value || '';
+ const $adminsWithPermissionTbody = $modalBody.find("#adminsWithPermission").find('tbody');
+ $.each($adminsWithPermissionTbody.find('tr'), (_, atr) => {
+ if ($(atr).find('td').text().includes(mask)) {
+ $(atr).show();
+ } else {
+ $(atr).hide();
+ }
+ });
+ }
+
+ function refreshAdminPermissionsPane(key) {
+ document.removeEventListener('keyup', filterAdminTable);
+
+ $.ajax({
+ method: 'POST',
+ url: window.location.href,
+ data: {
+ action: 'listPermissionConfigForSingleAdmins',
+ configKey: key,
+ [param]: token
+ },
+ dataType: 'json',
+ success: function (response) {
+ const $adminsWithPermission = $modalBody.find("#adminsWithPermission");
+ $adminsWithPermission.html('<div class="m-1 p-1"></div>' +
+ '<select class="m-1 p-1"><option value="-1">Выберите сотрудника для разрешения:</option></select>' +
+ '<table class="m-1 p-1"><tbody></tbody></table>')
+ const $adminsWithPermissionHeader = $adminsWithPermission.find('div')
+ $adminsWithPermissionHeader.text(key)
+ const $adminsWithPermissionSelect = $adminsWithPermission.find('select');
+
+ const adminMap = {};
+
+ $.each(response.admins, (groupName) => {
+ const optgroup = document.createElement('optgroup');
+ optgroup.label = groupName;
+ $.each(response.admins[groupName], (adminId) => {
+ const option = document.createElement('option');
+ const adminName = response.admins[groupName][adminId];
+ option.value = adminId;
+ option.text = adminName;
+ optgroup.append(option);
+ adminMap[adminId] = adminName + ' - ' + groupName;
+ })
+ $adminsWithPermissionSelect.append(optgroup);
+ });
+
+ $adminsWithPermissionSelect.select2({ dropdownParent: $modalBody });
+ $adminsWithPermissionSelect.on('change', () => {
+ const adminId = $adminsWithPermissionSelect.val()
+ $.ajax({
+ method: 'POST',
+ url: window.location.href,
+ data: {
+ action: 'updatePermissionConfigForSingleAdmin',
+ configKey: key,
+ adminId,
+ configValue: true,
+ [param]: token
+ },
+ dataType: 'text',
+ success: () => refreshAdminPermissionsPane(key)
+ });
+ })
+
+ document.addEventListener('keyup', filterAdminTable, true);
+
+ const $adminsWithPermissionTable = $adminsWithPermission.find('tbody');
+ $.each(response.adminsWithPermissionIds, (_, adminId) => {
+ const $atr = $('<tr><td>' + adminMap[adminId]
+ + '</td><td><button class="btn btn-danger"">X</button></td></tr>')
+ $atr.find('button').on('click', () => {
+ $.ajax({
+ method: 'POST',
+ url: window.location.href,
+ data: {
+ action: 'updatePermissionConfigForSingleAdmin',
+ configKey: key,
+ adminId,
+ configValue: false,
+ [param]: token
+ },
+ dataType: 'text',
+ success: () => {
+ $atr.remove();
+ }
+ });
+ })
+ $adminsWithPermissionTable.append($atr);
+ })
+ }
+ });
+ }
+
+ let firstRadio = null;
+
+ function drawThFooter(data, tbody) {
+ const htr = document.createElement('TR');
+ const hth1 = document.createElement('TH');
+ hth1.append(document.createTextNode('Права для отдельных пользователей'));
+ htr.append(hth1)
+
+ $.each(data.permissions, function(key) {
+ const hth = document.createElement('TH')
+ const radio = document.createElement('INPUT');
+ radio.type = 'radio';
+ radio.name = 'radio';
+ radio.onclick = () => refreshAdminPermissionsPane(key);
+ if (!firstRadio) {
+ firstRadio = radio;
+ }
+ hth.append(radio);
+ htr.append(hth)
+ })
+ tbody.append(htr);
+ }
+
drawTH(data, tbody);
$.each(data.adminGroups, function(ind) {
});
drawTH(data, tbody);
+ drawThFooter(data, tbody);
table.append(tbody);
$modalBody.append(table);
+ $modalBody.append('<div class="row m-2"></div>');
+
+ $modalBody.append('<div id="adminsWithPermission" class="border-dark border-wd-1"></div>');
+
+ if (firstRadio) {
+ firstRadio.click();
+ }
+
$('#mymodal').modal('show');
}
});