From 12e50911320e12a669b15e0daac8912de780bf12 2016-10-04 14:06:33 From: Marcin Lulek Date: 2016-10-04 14:06:33 Subject: [PATCH] state: move user object into state holder --- diff --git a/backend/src/appenlight/static/js/appenlight.js b/backend/src/appenlight/static/js/appenlight.js index e6c1038..187d51e 100644 --- a/backend/src/appenlight/static/js/appenlight.js +++ b/backend/src/appenlight/static/js/appenlight.js @@ -2772,7 +2772,9 @@ function kickstartAE(initialUserData) { app.run(['$rootScope', '$timeout', 'stateHolder', '$state', '$location', '$transitions', '$window', 'AeConfig', function ($rootScope, $timeout, stateHolder, $state, $location, $transitions, $window, AeConfig) { - stateHolder.AeUser = buildUser(initialUserData || {"user_name": null, "id": null}); + if (initialUserData){ + stateHolder.AeUser.update(initialUserData); + } $rootScope.$state = $state; $rootScope.stateHolder = stateHolder; $rootScope.flash = stateHolder.flashMessages.list; @@ -12705,6 +12707,73 @@ angular.module('appenlight.services.resources').factory('resourcesPropertyResour // # https://rhodecode.com/licenses/ angular.module('appenlight.services.stateHolder', []).factory('stateHolder', ['$timeout', 'AeConfig', function ($timeout, AeConfig) { + + var AeUser = {"user_name": null, "id": null}; + AeUser.update = function (jsonData) { + jsonData = jsonData || {}; + this.applications_map = {}; + this.dashboards_map = {}; + this.user_name = jsonData.user_name || null; + this.id = jsonData.id; + this.assigned_reports = jsonData.assigned_reports || null; + this.latest_events = jsonData.latest_events || null; + this.permissions = jsonData.permissions || null; + this.groups = jsonData.groups || null; + this.applications = []; + this.dashboards = []; + _.each(jsonData.applications, function (item) { + this.addApplication(item); + }.bind(this)); + _.each(jsonData.dashboards, function (item) { + this.addDashboard(item); + }.bind(this)); + }; + AeUser.addApplication = function (item) { + this.applications.push(item); + this.applications_map[item.resource_id] = item; + }; + AeUser.addDashboard = function (item) { + this.dashboards.push(item); + this.dashboards_map[item.resource_id] = item; + }; + + AeUser.removeApplicationById = function (applicationId) { + this.applications = _.filter(this.applications, function (item) { + return item.resource_id != applicationId; + }); + delete this.applications_map[applicationId]; + }; + AeUser.removeDashboardById = function (dashboardId) { + this.dashboards = _.filter(this.dashboards, function (item) { + return item.resource_id != dashboardId; + }); + delete this.dashboards_map[dashboardId]; + }; + + AeUser.hasAppPermission = function (perm_name) { + if (this.permissions.indexOf('root_administration') !== -1) { + return true + } + return this.permissions.indexOf(perm_name) !== -1; + }; + + AeUser.hasContextPermission = function (permName, ACLList) { + var hasPerm = false; + _.each(ACLList, function (ACL) { + // is this the right perm? + if (ACL.perm_name == permName || + ACL.perm_name == '__all_permissions__') { + // perm for this user or a group user belongs to + if (ACL.user_name === this.user_name || + this.groups.indexOf(ACL.group_name) !== -1) { + hasPerm = true + } + } + }.bind(this)); + + return hasPerm; + }; + /** * Holds some common stuff like flash messages, but important part is * plugins property that is a registry that holds all information about @@ -12766,14 +12835,14 @@ angular.module('appenlight.services.stateHolder', []).factory('stateHolder', ['$ } self.inclusions[name].push(inclusion); } - } + }; var stateHolder = { section: 'settings', resource: null, plugins: Plugins, flashMessages: flashMessages, - AeUser: {"user_name": null, "id": null} + AeUser: AeUser }; return stateHolder; }]); @@ -12892,90 +12961,3 @@ var underscore = angular.module('underscore', []); underscore.factory('_', function () { return window._; // assumes underscore has already been loaded on the page }); - -;// # Copyright (C) 2010-2016 RhodeCode GmbH -// # -// # This program is free software: you can redistribute it and/or modify -// # it under the terms of the GNU Affero General Public License, version 3 -// # (only), as published by the Free Software Foundation. -// # -// # This program is distributed in the hope that it will be useful, -// # but WITHOUT ANY WARRANTY; without even the implied warranty of -// # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// # GNU General Public License for more details. -// # -// # You should have received a copy of the GNU Affero General Public License -// # along with this program. If not, see . -// # -// # This program is dual-licensed. If you wish to learn more about the -// # AppEnlight Enterprise Edition, including its added features, Support -// # services, and proprietary license terms, please see -// # https://rhodecode.com/licenses/ - -function buildUser(jsonData){ - var AeUser = { - user_name: jsonData.user_name || null, - id: jsonData.id, - assigned_reports: jsonData.assigned_reports || null, - latest_events: jsonData.latest_events || null, - permissions: jsonData.permissions || null, - groups: jsonData.groups || null, - applications: [], - dashboards: [] - }; - AeUser.applications_map = {}; - AeUser.dashboards_map = {}; - AeUser.addApplication = function (item) { - AeUser.applications.push(item); - AeUser.applications_map[item.resource_id] = item; - }; - AeUser.addDashboard = function (item) { - AeUser.dashboards.push(item); - AeUser.dashboards_map[item.resource_id] = item; - }; - - AeUser.removeApplicationById = function (applicationId) { - AeUser.applications = _.filter(AeUser.applications, function (item) { - return item.resource_id != applicationId; - }); - delete AeUser.applications_map[applicationId]; - }; - AeUser.removeDashboardById = function (dashboardId) { - AeUser.dashboards = _.filter(AeUser.dashboards, function (item) { - return item.resource_id != dashboardId; - }); - delete AeUser.dashboards_map[dashboardId]; - }; - - AeUser.hasAppPermission = function (perm_name) { - if (AeUser.permissions.indexOf('root_administration') !== -1) { - return true - } - return AeUser.permissions.indexOf(perm_name) !== -1; - }; - - AeUser.hasContextPermission = function (permName, ACLList) { - var hasPerm = false; - _.each(ACLList, function (ACL) { - // is this the right perm? - if (ACL.perm_name == permName || - ACL.perm_name == '__all_permissions__') { - // perm for this user or a group user belongs to - if (ACL.user_name === AeUser.user_name || - AeUser.groups.indexOf(ACL.group_name) !== -1) { - hasPerm = true - } - } - }); - - return hasPerm; - }; - - _.each(jsonData.applications, function (item) { - AeUser.addApplication(item); - }); - _.each(jsonData.dashboards, function (item) { - AeUser.addDashboard(item); - }); - return AeUser; -} diff --git a/frontend/src/app.js b/frontend/src/app.js index 5175e0c..240c954 100644 --- a/frontend/src/app.js +++ b/frontend/src/app.js @@ -137,7 +137,9 @@ function kickstartAE(initialUserData) { app.run(['$rootScope', '$timeout', 'stateHolder', '$state', '$location', '$transitions', '$window', 'AeConfig', function ($rootScope, $timeout, stateHolder, $state, $location, $transitions, $window, AeConfig) { - stateHolder.AeUser = buildUser(initialUserData || {"user_name": null, "id": null}); + if (initialUserData){ + stateHolder.AeUser.update(initialUserData); + } $rootScope.$state = $state; $rootScope.stateHolder = stateHolder; $rootScope.flash = stateHolder.flashMessages.list; diff --git a/frontend/src/services/state_holder.js b/frontend/src/services/state_holder.js index 2bd7d30..c6f9ac5 100644 --- a/frontend/src/services/state_holder.js +++ b/frontend/src/services/state_holder.js @@ -18,6 +18,73 @@ // # https://rhodecode.com/licenses/ angular.module('appenlight.services.stateHolder', []).factory('stateHolder', ['$timeout', 'AeConfig', function ($timeout, AeConfig) { + + var AeUser = {"user_name": null, "id": null}; + AeUser.update = function (jsonData) { + jsonData = jsonData || {}; + this.applications_map = {}; + this.dashboards_map = {}; + this.user_name = jsonData.user_name || null; + this.id = jsonData.id; + this.assigned_reports = jsonData.assigned_reports || null; + this.latest_events = jsonData.latest_events || null; + this.permissions = jsonData.permissions || null; + this.groups = jsonData.groups || null; + this.applications = []; + this.dashboards = []; + _.each(jsonData.applications, function (item) { + this.addApplication(item); + }.bind(this)); + _.each(jsonData.dashboards, function (item) { + this.addDashboard(item); + }.bind(this)); + }; + AeUser.addApplication = function (item) { + this.applications.push(item); + this.applications_map[item.resource_id] = item; + }; + AeUser.addDashboard = function (item) { + this.dashboards.push(item); + this.dashboards_map[item.resource_id] = item; + }; + + AeUser.removeApplicationById = function (applicationId) { + this.applications = _.filter(this.applications, function (item) { + return item.resource_id != applicationId; + }); + delete this.applications_map[applicationId]; + }; + AeUser.removeDashboardById = function (dashboardId) { + this.dashboards = _.filter(this.dashboards, function (item) { + return item.resource_id != dashboardId; + }); + delete this.dashboards_map[dashboardId]; + }; + + AeUser.hasAppPermission = function (perm_name) { + if (this.permissions.indexOf('root_administration') !== -1) { + return true + } + return this.permissions.indexOf(perm_name) !== -1; + }; + + AeUser.hasContextPermission = function (permName, ACLList) { + var hasPerm = false; + _.each(ACLList, function (ACL) { + // is this the right perm? + if (ACL.perm_name == permName || + ACL.perm_name == '__all_permissions__') { + // perm for this user or a group user belongs to + if (ACL.user_name === this.user_name || + this.groups.indexOf(ACL.group_name) !== -1) { + hasPerm = true + } + } + }.bind(this)); + console.log('AeUser.hasContextPermission', permName, hasPerm); + return hasPerm; + }; + /** * Holds some common stuff like flash messages, but important part is * plugins property that is a registry that holds all information about @@ -79,14 +146,14 @@ angular.module('appenlight.services.stateHolder', []).factory('stateHolder', ['$ } self.inclusions[name].push(inclusion); } - } + }; var stateHolder = { section: 'settings', resource: null, plugins: Plugins, flashMessages: flashMessages, - AeUser: {"user_name": null, "id": null} + AeUser: AeUser }; return stateHolder; }]); diff --git a/frontend/src/user.js b/frontend/src/user.js deleted file mode 100644 index 776b32d..0000000 --- a/frontend/src/user.js +++ /dev/null @@ -1,86 +0,0 @@ -// # Copyright (C) 2010-2016 RhodeCode GmbH -// # -// # This program is free software: you can redistribute it and/or modify -// # it under the terms of the GNU Affero General Public License, version 3 -// # (only), as published by the Free Software Foundation. -// # -// # This program is distributed in the hope that it will be useful, -// # but WITHOUT ANY WARRANTY; without even the implied warranty of -// # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// # GNU General Public License for more details. -// # -// # You should have received a copy of the GNU Affero General Public License -// # along with this program. If not, see . -// # -// # This program is dual-licensed. If you wish to learn more about the -// # AppEnlight Enterprise Edition, including its added features, Support -// # services, and proprietary license terms, please see -// # https://rhodecode.com/licenses/ - -function buildUser(jsonData){ - var AeUser = { - user_name: jsonData.user_name || null, - id: jsonData.id, - assigned_reports: jsonData.assigned_reports || null, - latest_events: jsonData.latest_events || null, - permissions: jsonData.permissions || null, - groups: jsonData.groups || null, - applications: [], - dashboards: [] - }; - AeUser.applications_map = {}; - AeUser.dashboards_map = {}; - AeUser.addApplication = function (item) { - AeUser.applications.push(item); - AeUser.applications_map[item.resource_id] = item; - }; - AeUser.addDashboard = function (item) { - AeUser.dashboards.push(item); - AeUser.dashboards_map[item.resource_id] = item; - }; - - AeUser.removeApplicationById = function (applicationId) { - AeUser.applications = _.filter(AeUser.applications, function (item) { - return item.resource_id != applicationId; - }); - delete AeUser.applications_map[applicationId]; - }; - AeUser.removeDashboardById = function (dashboardId) { - AeUser.dashboards = _.filter(AeUser.dashboards, function (item) { - return item.resource_id != dashboardId; - }); - delete AeUser.dashboards_map[dashboardId]; - }; - - AeUser.hasAppPermission = function (perm_name) { - if (AeUser.permissions.indexOf('root_administration') !== -1) { - return true - } - return AeUser.permissions.indexOf(perm_name) !== -1; - }; - - AeUser.hasContextPermission = function (permName, ACLList) { - var hasPerm = false; - _.each(ACLList, function (ACL) { - // is this the right perm? - if (ACL.perm_name == permName || - ACL.perm_name == '__all_permissions__') { - // perm for this user or a group user belongs to - if (ACL.user_name === AeUser.user_name || - AeUser.groups.indexOf(ACL.group_name) !== -1) { - hasPerm = true - } - } - }); - console.log('AeUser.hasContextPermission', permName, hasPerm); - return hasPerm; - }; - - _.each(jsonData.applications, function (item) { - AeUser.addApplication(item); - }); - _.each(jsonData.dashboards, function (item) { - AeUser.addDashboard(item); - }); - return AeUser; -}