From 79966027428a7d9e1425c63777647e53c9167066 Mon Sep 17 00:00:00 2001 From: Christian Hofmaier Date: Fri, 10 Aug 2018 00:28:51 +0000 Subject: [permissions] Add recursive group selection + tables changed to search tables Role Table has now a new column recursiveGroups to display if recursive selection is wanted Roles and Permissions can now have longer descriptions Data-Tables are now Udos Search-Tables --- server/api/permissions.js | 9 +- server/app.js | 2 +- server/migrations/20180726033100-create-role.js | 5 +- .../migrations/20180726171200-create-permission.js | 2 +- .../20180804234000-create-role_x_group.js | 30 ----- .../20180809013230-create-role_x_group.js | 30 +++++ server/models/permission.js | 2 +- server/models/role.js | 3 +- webapp/src/components/PermissionModuleEdit.vue | 122 ++++++++++++--------- .../src/components/PermissionModuleGrantRevoke.vue | 49 +++++---- webapp/src/components/PermissionModuleRoleList.vue | 29 ++--- webapp/src/components/PermissionModuleUserList.vue | 28 ++--- 12 files changed, 165 insertions(+), 146 deletions(-) delete mode 100644 server/migrations/20180804234000-create-role_x_group.js create mode 100644 server/migrations/20180809013230-create-role_x_group.js diff --git a/server/api/permissions.js b/server/api/permissions.js index 5ed09e0..7894719 100644 --- a/server/api/permissions.js +++ b/server/api/permissions.js @@ -59,16 +59,17 @@ module.exports.post = { * name: * descr: * permissions: - * groups: + * groups: , + * recursiveMode: < RECURSIVE_MODE> * - * Creates or updates a role. + * Creates or updates a role. If recursiveMode is set to true, the are saved with childs. */ saveRole: function (req, res) { const role = req.body if (role.id === 0) { // Insert new role in the db. - db.role.create({ name: role.name, descr: role.descr }).then(roleDb => { + db.role.create({ name: role.name, descr: role.descr, recursiveGroups: role.recursiveMode }).then(roleDb => { var promises = [] promises.push(roleDb.addPermissions(role.permissions)) promises.push(roleDb.addGroups(role.groups)) @@ -78,7 +79,7 @@ module.exports.post = { // Update an existing role in the db. db.role.findOne({ where: { id: role.id } }).then(roleDb => { var promises = [] - promises.push(roleDb.update({ name: role.name, descr: role.descr })) + promises.push(roleDb.update({ name: role.name, descr: role.descr, recursiveGroups: role.recursiveMode })) promises.push(roleDb.setPermissions(role.permissions)) promises.push(roleDb.setGroups(role.groups)) Promise.all(promises).then(() => { res.send({ id: role.id }) }) diff --git a/server/app.js b/server/app.js index c9a270c..f9b0845 100644 --- a/server/app.js +++ b/server/app.js @@ -12,7 +12,7 @@ global.__appdir = __dirname require('./lib/tftp') // Read permissions from JSON and update the database -require('./lib/permissions') +require('./lib/permissions/index.js') // ############################################################################ // ########################### setup middleware ############################### diff --git a/server/migrations/20180726033100-create-role.js b/server/migrations/20180726033100-create-role.js index c930148..20736a2 100644 --- a/server/migrations/20180726033100-create-role.js +++ b/server/migrations/20180726033100-create-role.js @@ -12,7 +12,10 @@ module.exports = { type: Sequelize.STRING }, descr: { - type: Sequelize.STRING + type: Sequelize.STRING(2048) + }, + recursiveGroups: { + type: Sequelize.BOOLEAN } }) }, diff --git a/server/migrations/20180726171200-create-permission.js b/server/migrations/20180726171200-create-permission.js index 822e47c..a20ca79 100644 --- a/server/migrations/20180726171200-create-permission.js +++ b/server/migrations/20180726171200-create-permission.js @@ -12,7 +12,7 @@ module.exports = { type: Sequelize.STRING }, descr: { - type: Sequelize.STRING + type: Sequelize.STRING(2048) }, groupdependent: { type: Sequelize.BOOLEAN diff --git a/server/migrations/20180804234000-create-role_x_group.js b/server/migrations/20180804234000-create-role_x_group.js deleted file mode 100644 index a6dd792..0000000 --- a/server/migrations/20180804234000-create-role_x_group.js +++ /dev/null @@ -1,30 +0,0 @@ -'use strict' -module.exports = { - up: (queryInterface, Sequelize) => { - return queryInterface.createTable('role_x_group', { - roleId: { - primaryKey: true, - allowNull: false, - type: Sequelize.INTEGER, - onDelete: 'cascade', - references: { - model: 'roles', - key: 'id' - } - }, - groupId: { - primaryKey: true, - allowNull: false, - type: Sequelize.INTEGER, - onDelete: 'cascade', - references: { - model: 'groups', - key: 'id' - } - } - }) - }, - down: (queryInterface, Sequelize) => { - return queryInterface.dropTable('role_x_group') - } -} diff --git a/server/migrations/20180809013230-create-role_x_group.js b/server/migrations/20180809013230-create-role_x_group.js new file mode 100644 index 0000000..a6dd792 --- /dev/null +++ b/server/migrations/20180809013230-create-role_x_group.js @@ -0,0 +1,30 @@ +'use strict' +module.exports = { + up: (queryInterface, Sequelize) => { + return queryInterface.createTable('role_x_group', { + roleId: { + primaryKey: true, + allowNull: false, + type: Sequelize.INTEGER, + onDelete: 'cascade', + references: { + model: 'roles', + key: 'id' + } + }, + groupId: { + primaryKey: true, + allowNull: false, + type: Sequelize.INTEGER, + onDelete: 'cascade', + references: { + model: 'groups', + key: 'id' + } + } + }) + }, + down: (queryInterface, Sequelize) => { + return queryInterface.dropTable('role_x_group') + } +} diff --git a/server/models/permission.js b/server/models/permission.js index a1bd5d3..af007a0 100644 --- a/server/models/permission.js +++ b/server/models/permission.js @@ -8,7 +8,7 @@ module.exports = (sequelize, DataTypes) => { type: DataTypes.INTEGER }, name: DataTypes.STRING, - descr: DataTypes.STRING, + descr: DataTypes.STRING(2048), groupdependent: DataTypes.BOOLEAN }, { timestamps: false diff --git a/server/models/role.js b/server/models/role.js index f33b042..f88c132 100644 --- a/server/models/role.js +++ b/server/models/role.js @@ -8,7 +8,8 @@ module.exports = (sequelize, DataTypes) => { type: DataTypes.INTEGER }, name: DataTypes.STRING, - descr: DataTypes.STRING + descr: DataTypes.STRING(2048), + recursiveGroups: DataTypes.BOOLEAN }, { timestamps: false }) diff --git a/webapp/src/components/PermissionModuleEdit.vue b/webapp/src/components/PermissionModuleEdit.vue index e1cf45f..8a981ca 100644 --- a/webapp/src/components/PermissionModuleEdit.vue +++ b/webapp/src/components/PermissionModuleEdit.vue @@ -11,7 +11,8 @@ "groups": "Groups", "summary": "Summary", "roleName": "Role Name", - "roleNameEmptyError": "Role Name can't be empty." + "roleNameEmptyError": "Role Name can't be empty.", + "recursiveMode": "Select Groups recursive" }, "de": { "id": "ID", @@ -24,7 +25,8 @@ "groups": "Gruppen", "summary": "Zusammenfassung", "roleName": "Rollenname", - "roleNameEmptyError": "Rollenname kann nicht leer sein." + "roleNameEmptyError": "Rollenname kann nicht leer sein.", + "recursiveMode": "Gruppen rekursiv auswählen" } } @@ -33,8 +35,9 @@ @@ -78,7 +81,7 @@ - + @@ -103,64 +106,48 @@ rows="1" auto-grow > - - - + + - + - - + + + - + @@ -207,7 +194,7 @@ {{ $t('groups') }} @@ -239,10 +226,15 @@