Roles management working good
authorCharles du Jeu <charles.dujeu@gmail.com>
Sat, 19 Sep 2009 22:42:11 +0000 (22:42 +0000)
committerCharles du Jeu <charles.dujeu@gmail.com>
Sat, 19 Sep 2009 22:42:11 +0000 (22:42 +0000)
git-svn-id: https://svn.argeo.org/commons/trunk@2984 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

security/runtime/org.argeo.security.ria/src/argeo-ria-lib/security/class/org/argeo/security/ria/RolesApplet.js
security/runtime/org.argeo.security.ria/src/argeo-ria-lib/security/class/org/argeo/security/ria/SecurityAPI.js
security/runtime/org.argeo.security.ria/src/argeo-ria-lib/security/class/org/argeo/security/ria/UserEditorApplet.js
security/runtime/org.argeo.security.ria/src/argeo-ria-lib/security/class/org/argeo/security/ria/UsersApplet.js
security/runtime/org.argeo.security.ria/src/argeo-ria-lib/security/class/org/argeo/security/ria/components/CoworkerNatureImpl.js
security/runtime/org.argeo.security.ria/src/argeo-ria-lib/security/class/org/argeo/security/ria/components/INaturePane.js
security/runtime/org.argeo.security.ria/src/argeo-ria-lib/security/class/org/argeo/security/ria/components/SimpleUserNatureImpl.js
security/runtime/org.argeo.security.ria/src/argeo-ria-lib/security/class/org/argeo/security/ria/model/User.js

index 3533221af41a90ee4aed32c0b57b47721005acb8..65b5427b30259fbe5dc1a968744151cbad0d73f1 100644 (file)
@@ -37,6 +37,15 @@ qx.Class.define("org.argeo.security.ria.RolesApplet",
                                toolbar         : null,
                                callback        : function(e){
                                        // Prompt for new name
+                                       var modal = new org.argeo.ria.components.Modal();
+                                       modal.makePromptForm("Please enter a role name", function(roleName){
+                                               var service = org.argeo.security.ria.SecurityAPI.getCreateRoleService(roleName);
+                                               service.addListener("completed", function(response){
+                                                       this.loadRolesList();
+                                               }, this);
+                                               service.send();
+                                       }, this);
+                                       modal.attachAndShow();
                                },
                                command         : null
                        },      
@@ -49,9 +58,13 @@ qx.Class.define("org.argeo.security.ria.RolesApplet",
                                toolbar         : null,
                                callback        : function(e){
                                        // Call service to delete
-                                       var crtUsers = this.getViewSelection().getNodes();
-                                       for(var i=0;i<crtUsers.length;i++){
-                                               alert("Delete " + crtUsers[i]);
+                                       var roles = this.getViewSelection().getNodes();
+                                       for(var i=0;i<roles.length;i++){
+                                               var service = org.argeo.security.ria.SecurityAPI.getDeleteRoleService(roles[i]);
+                                               service.addListener("completed", function(response){
+                                                       this.loadRolesList();
+                                               }, this);
+                                               service.send();
                                        }
                                },
                                selectionChange : function(viewName, data){
@@ -86,6 +99,10 @@ qx.Class.define("org.argeo.security.ria.RolesApplet",
        guiMode : {
                apply : "_applyGuiMode"
        },
+       rolesList : {
+               check : "Array",
+               event : "changeRolesList"
+       },      
        chooserOriginalSelection : {},
        chooserSelectionModified : {
                init:false,
@@ -182,6 +199,11 @@ qx.Class.define("org.argeo.security.ria.RolesApplet",
                this.table.addListener("cellDblclick", function(cellEvent){
                        this.setGuiMode("edit");
                }, this);
+               this.addListener("changeRolesList", function(event){
+                       var data = [];
+                       event.getData().forEach(function(el){data.push([el]);});
+                       this.tableModel.setData(data);                                                  
+               }, this);
                
                this.setGuiMode("clear");
        },
@@ -231,8 +253,34 @@ qx.Class.define("org.argeo.security.ria.RolesApplet",
        },
        
        saveRoleModifications : function(deltaPlus, deltaMinus){
-               console.log(deltaPlus);
-               console.log(deltaMinus);
+               //console.log(deltaPlus);
+               //console.log(deltaMinus);
+               // LOAD CONCERNED USERS
+               var selectionModel = this.table.getSelectionModel();
+               if(!selectionModel.getSelectedCount()){
+                       return;
+               }
+               var roleValue = this._selectionToValues(selectionModel)[0];
+               
+               var users = deltaPlus.concat(deltaMinus);
+               for(var i=0;i<users.length;i++){
+                       var user = users[i];
+                       var userDetailService = org.argeo.security.ria.SecurityAPI.getUserDetailsService(users[i]);
+                       userDetailService.addListener("completed", function(response){
+                               var userRoles = response.getContent().roles;
+                               if(qx.lang.Array.contains(deltaPlus, user)){
+                                       userRoles.push(roleValue);
+                               }else if(qx.lang.Array.contains(deltaMinus, user)){
+                                       qx.lang.Array.remove(userRoles, roleValue);
+                               }
+                               var userSaveService = org.argeo.security.ria.SecurityAPI.getUpdateUserService(response.getContent());
+                               userSaveService.addListener("completed", function(e){
+                                       this.fireDataEvent("changeRolesList", this.getRolesList());
+                               }, this);
+                               userSaveService.send();
+                       }, this);
+                       userDetailService.send();
+               }
        },
        
        monitorChooserSelectionChanges : function(event){
@@ -307,14 +355,6 @@ qx.Class.define("org.argeo.security.ria.RolesApplet",
         */
        load : function(){
                
-               var service = org.argeo.security.ria.SecurityAPI.getListRolesService();
-               service.addListener("completed", function(response){
-                       var data = [];
-                       response.getContent().forEach(function(el){data.push([el]);});
-                       this.tableModel.setData(data);                          
-               }, this);
-               service.send();
-               
                var commands = this.getCommands();
                this.toolBarPart.add(commands["new_role"].command.getToolbarButton());
                this.toolBarPart.add(commands["delete_role"].command.getToolbarButton());
@@ -325,6 +365,17 @@ qx.Class.define("org.argeo.security.ria.RolesApplet",
                this.toolBar.add(this.cancelButton);                            
                this.toolBar.setShow("icon");
                
+               this.loadRolesList();
+               
+       },
+       
+       loadRolesList : function(){
+               this.setRolesList([]);
+               var service = org.argeo.security.ria.SecurityAPI.getListRolesService();
+               service.addListener("completed", function(response){
+                       this.setRolesList(response.getContent());
+               }, this);
+               service.send();                 
        },
                 
        addScroll : function(){
index af3fabf95ad6e7b236208d141175a16199e700e2..962f402d25d24376d2a1967c9ba71971b12aed59 100644 (file)
@@ -9,6 +9,7 @@ qx.Class.define("org.argeo.security.ria.SecurityAPI", {
                USERS_LIST_SERVICE : "getUsersList.security",\r
                USER_EXISTS_SERVICE : "userExists.security",            \r
                DELETE_USER_SERVICE : "deleteUser.security",\r
+               UPDATE_USER_SERVICE : "updateUser.security",\r
                GET_USER_DETAILS_SERVICE : "getUserDetails.security",\r
                CREATE_USER_SERVICE : "createUser.security",\r
                UPDATE_USER_PASS_SERVICE : "updateUserPassword.security",\r
@@ -98,6 +99,18 @@ qx.Class.define("org.argeo.security.ria.SecurityAPI", {
                        return req;\r
                },\r
                \r
+               /**\r
+                * @return  {qx.io.remote.Request}\r
+                */\r
+               getUpdateUserService : function(userObject){\r
+                       var req = org.argeo.security.ria.SecurityAPI.getServiceRequest(org.argeo.security.ria.SecurityAPI.UPDATE_USER_SERVICE);\r
+                       req.setMethod("POST");\r
+                       org.argeo.security.ria.SecurityAPI.parseOptionalArguments(req, arguments, 1);\r
+                       var jsonString = qx.util.Json.stringify(userObject);\r
+                       req.setData(jsonString);\r
+                       return req;\r
+               },\r
+               \r
                /**\r
                 * @return  {qx.io.remote.Request}\r
                 */\r
index 2d51a172e3e7a17f39e7827cea1b58c25218ca43..55316d26e5f980ae371bdf0e19208cae1d7528a2 100644 (file)
@@ -159,13 +159,13 @@ qx.Class.define("org.argeo.security.ria.UserEditorApplet",
         * @param viewPane {org.argeo.ria.components.ViewPane} The viewPane.
         */
        init : function(viewPane, data){
-               if(!data){
+               if(!data.USER){
                        var now = new Date();
                        this.setInstanceId(now.getTime());
                        this.setInstanceLabel("New User");                      
                }else{
-                       this.setInstanceId(data);
-                       this.setInstanceLabel("User " + data);
+                       this.setInstanceId(data.USER);
+                       this.setInstanceLabel("User " + data.USER);
                }
                this.setView(viewPane);
                this.setViewSelection(new org.argeo.ria.components.ViewSelection(viewPane.getViewId()));
@@ -211,7 +211,7 @@ qx.Class.define("org.argeo.security.ria.UserEditorApplet",
                this.basicGB.add(this.usernameField, {row:0,column:1});
                
                this.rolesField = new org.argeo.ria.components.ui.MultipleComboBox();
-               this.rolesField.setChoiceValues(["ROLE_ADMIN", "ROLE_USER", "ROLE_USER1"]);
+               this.rolesField.setChoiceValues(data.ROLES_LIST);
                this.basicGB.add(new qx.ui.basic.Label("Roles"), {row:1,column:0});             
                this.basicGB.add(this.rolesField, {row:1,column:1});
                
@@ -250,17 +250,14 @@ qx.Class.define("org.argeo.security.ria.UserEditorApplet",
                var user = this.getCurrentUser();
                user.setName(this.usernameField.getValue());
                user.setRoles((this.rolesField.getValue()||"").split(","));
-               // GO TO AND RETURN FROM SERVER                 
-               user.setNatures([
-                       {
-                           "email" : "",
-                           "firstName" : "",
-                           "lastName" : "",
-                           "type" : "org.argeo.security.nature.SimpleUserNature"
-                       }]
-               );
-               this.partialRefreshUser(user, ["details","natures"]);
-               this.setModified(false);                
+               // GO TO AND RETURN FROM SERVER
+               var userService = user.getSaveService();
+               userService.send();
+               userService.addListener("completed", function(e){
+                       this.partialRefreshUser(user, ["details","natures"]);
+                       this.setModified(false);
+                       this.getViewSelection().triggerEvent();
+               }, this);
        },
        
        _addNatureTab : function(natureClass, natureData, select){
@@ -294,13 +291,23 @@ qx.Class.define("org.argeo.security.ria.UserEditorApplet",
                        cancelB.setVisibility("visible");
                });
                cancelB.addListener("execute", function(){
+                       if(newClass.getIsNew()){
+                               this._removeNatureTab(natureClass);
+                       }
                        newClass.setEditMode(false);
                        editB.setVisibility("visible");
                        saveB.setVisibility("excluded");
                        cancelB.setVisibility("excluded");
-               });
+               }, this);
                saveB.addListener("execute", function(){
                        // SAVE CURRENT NATURE
+                       var data = newClass.getData();
+                       if(newClass.getIsNew()){
+                               this.getCurrentUser().addNature(data);
+                       }else{
+                               this.getCurrentUser().updateNature(data);
+                       }
+                       this.saveUser();
                        this.setNaturesModified(false);
                        newClass.setEditMode(false);
                        editB.setVisibility("visible");
@@ -308,9 +315,10 @@ qx.Class.define("org.argeo.security.ria.UserEditorApplet",
                        cancelB.setVisibility("excluded");
                }, this);
                if(natureData){
-                       newClass.setData(natureData);
+                       newClass.setData(natureData);                   
                        cancelB.execute();
                }else{
+                       newClass.setIsNew(true);
                        editB.execute();
                }
                this.naturesTab.add(page);
@@ -341,7 +349,11 @@ qx.Class.define("org.argeo.security.ria.UserEditorApplet",
        
        removeSelectedTab : function(){
                var selected = this.naturesTab.getSelected();
-               this._removeNatureTab(selected.getUserData("NATURE_CLASS"));
+               var tabClass = selected.getUserData("NATURE_CLASS");
+               var user = this.getCurrentUser();
+               user.removeNature(tabClass.NATURE_TYPE);
+               this.saveUser();
+               this._removeNatureTab(tabClass);
        },
        
        removeAllTabs : function(){
@@ -415,9 +427,7 @@ qx.Class.define("org.argeo.security.ria.UserEditorApplet",
        load : function(user){
                if(this.getLoaded()){
                        return;
-               }
-               this.setRolesList(["ROLE_ADMIN", "ROLE_USER"]);
-               
+               }               
                // MUST BE DONE AFTER COMMANDS ARE INITIALIZED! 
                var commands = this.getCommands();
                var saveButton = commands["save_user"].command.getFormButton(); 
index 6a00e787cdcb9d2b82db3826169e907063761cc2..206bf1436f564a40fa2d3e27dae4eaa741934679 100644 (file)
@@ -50,7 +50,8 @@ qx.Class.define("org.argeo.security.ria.UsersApplet",
                                callback        : function(e){
                                        // Call service to delete
                                        var classObj = org.argeo.security.ria.UserEditorApplet;
-                                       var iView = org.argeo.ria.components.ViewsManager.getInstance().initIViewClass(classObj, "editor");
+                                       var initData = {USER:null,ROLES_LIST:this.getRolesList()};
+                                       var iView = org.argeo.ria.components.ViewsManager.getInstance().initIViewClass(classObj, "editor", initData);
                                        iView.load();
                                },
                                command         : null
@@ -87,7 +88,8 @@ qx.Class.define("org.argeo.security.ria.UsersApplet",
                                        var crtUser = this.getViewSelection().getNodes()[0];
                                        var userObject = this.getUsersList()[crtUser];
                                        var classObj = org.argeo.security.ria.UserEditorApplet;
-                                       var iView = org.argeo.ria.components.ViewsManager.getInstance().initIViewClass(classObj, "editor", crtUser);
+                                       var initData = {USER:crtUser,ROLES_LIST:this.getRolesList()};
+                                       var iView = org.argeo.ria.components.ViewsManager.getInstance().initIViewClass(classObj, "editor", initData);
                                        iView.load(userObject);                                 
                                },
                                selectionChange : function(viewName, data){
@@ -114,8 +116,7 @@ qx.Class.define("org.argeo.security.ria.UsersApplet",
                event : "changeUsersList"
        },
        rolesList : {
-               check : "Array",
-               event : "changeRolesList"
+               check : "Array"
        },
        instanceId : {init:""},
        instanceLabel : {init:""}
@@ -155,6 +156,7 @@ qx.Class.define("org.argeo.security.ria.UsersApplet",
                        this.getCommands()["edit_user"].command.execute();
                }, this);
                
+               this.setRolesList([]);
                this.setUsersList({});          
                this.setGuiMode("clear");
        },
@@ -204,6 +206,13 @@ qx.Class.define("org.argeo.security.ria.UsersApplet",
                this.toolBarPart.add(commands["edit_user"].command.getToolbarButton());                 
                this.toolBar.setShow("icon");
                this.loadUsersList();
+               
+               var rolesApplet = org.argeo.ria.components.ViewsManager.getInstance().getViewPaneById("roles").getContent();
+               rolesApplet.addListener("changeRolesList", function(e){
+                       this.setRolesList(e.getData());
+                       this.loadUsersList();
+               }, this);
+               
        },
        
        loadUsersList : function(){
@@ -223,13 +232,9 @@ qx.Class.define("org.argeo.security.ria.UsersApplet",
        
        _applyUsersList : function(usList){
                var data = [];
-               var rolesList = [];
                qx.lang.Object.getValues(usList).forEach(function(usObject){
-                       var roles = usObject.getRoles();
-                       rolesList = qx.lang.Array.unique(rolesList.concat(roles));
                        data.push([usObject.getName(), usObject.getRoles().join(",")]);
                });
-               this.setRolesList(rolesList);
                this.tableModel.setData(data);                                  
        },
                
index a495563e603cb1fd53ed67c6881148f9e22a811d..e63d37479946de67e28f2c6935d948a8715cfe96 100644 (file)
@@ -7,7 +7,10 @@ qx.Class.define("org.argeo.security.ria.components.CoworkerNatureImpl", {
        },\r
        \r
        construct : function(){\r
-               this.base(arguments);           \r
+               this.base(arguments);\r
+               this.setDataMap({\r
+                       type:"org.argeo.security.nature.CoworkerNature"\r
+               });             \r
        },\r
                \r
        members : {\r
index 5d5c97e4d8aee2b5029fabed726d029c23527c46..1938fa727bd3e75913a24c82f5c75e50b856956d 100644 (file)
@@ -10,6 +10,10 @@ qx.Interface.define("org.argeo.security.ria.components.INaturePane", {
                        init : true,\r
                        apply : "_applyEditMode",                       \r
                        event : "changeEditMode"\r
+               },\r
+               isNew   : {\r
+                       init : false,\r
+                       check : "Boolean"\r
                }\r
        },\r
        members : {\r
index 342cee246bf91cae6891673a037d89ee42e48674..182183ab1beae8716fd1bd3a599f0d2a0d49efd5 100644 (file)
@@ -20,11 +20,18 @@ qx.Class.define("org.argeo.security.ria.components.SimpleUserNatureImpl", {
                        init : true,\r
                        apply : "_applyEditMode",\r
                        event : "changeEditMode"\r
+               },\r
+               isNew   : {\r
+                       init : false,\r
+                       check : "Boolean"\r
                }               \r
        },\r
        \r
        construct : function(){\r
                this.base(arguments);   \r
+               this.setDataMap({\r
+                       type:"org.argeo.security.nature.SimpleUserNature"\r
+               });\r
                this._createGui();\r
                this.setEditMode(false);                \r
        },\r
@@ -79,10 +86,8 @@ qx.Class.define("org.argeo.security.ria.components.SimpleUserNatureImpl", {
                },\r
                getData    : function(format){\r
                        var dataMap = this.getDataMap();\r
-                       for(var key in dataMap){\r
-                               if(this.fields[key]){\r
-                                       dataMap[key] = this.fields[key].getValue();\r
-                               }\r
+                       for(var key in this.fields){\r
+                               dataMap[key] = this.fields[key].getValue();\r
                        }\r
                        this.setDataMap(dataMap);\r
                        return dataMap;\r
index 9355388631334b6f880b50d00f9c2921b683607b..4595fbcb5b103829aa9487fff848afbe0253eb10 100644 (file)
@@ -27,11 +27,49 @@ qx.Class.define("org.argeo.security.ria.model.User", {
                        this.setNatures(data.userNatures);\r
                        this.setRawData(data);\r
                },\r
+               getSaveService : function(){\r
+                       var userService = org.argeo.security.ria.SecurityAPI.getUpdateUserService(this.toJSON());\r
+                       userService.addListener("completed", function(response){\r
+                               if(!response || !response.username) return;\r
+                               this.load(response.getContent(), "json");\r
+                       }, this);\r
+                       return userService;                     \r
+               },\r
                toJSON : function(){\r
                        var rawData = this.getRawData();\r
                        rawData.username = this.getName();\r
                        rawData.roles = this.getRoles();\r
                        rawData.userNatures = this.getNatures();\r
+                       return rawData;\r
+               },\r
+               _getNatureByType : function(natureType){\r
+                       var found = false;\r
+                       this.getNatures().forEach(function(el){\r
+                               if(el.type == natureType){\r
+                                       found = el;\r
+                               }\r
+                       });             \r
+                       return found;\r
+               },\r
+               addNature : function(nature){\r
+                       if(this._getNatureByType(nature.type)){\r
+                               return;\r
+                       }\r
+                       this.getNatures().push(nature);\r
+               },\r
+               removeNature : function(natureType){\r
+                       var foundNature = this._getNatureByType(natureType)\r
+                       if(foundNature){\r
+                               qx.lang.Array.remove(this.getNatures(), foundNature);\r
+                       }\r
+               },\r
+               updateNature : function(nature){\r
+                       var natures = this.getNatures();\r
+                       for(var i=0;i<natures;i++){\r
+                               if(natures[i].type == nature.type){\r
+                                       natures[i] = nature;\r
+                               }\r
+                       }\r
                }\r
        }\r
        \r