Re: Problem with grant and revoke user roles in turbine-4

Jeffery Painter <[email protected]> Thu, 16 Nov 2017 17:29:39 -0500
Newsgroups gmane.comp.jakarta.turbine.user
Message-ID <[email protected]>
I looked a little more at the test cases, and got my code setup enough 
to try and call the fulcrum security service directly...

                                     // try using fulcrum service
((TurbineModelManager)fulcrumSecurityService.getModelManager()).grant(fulcrumUser, 
group, role);

The error logs are still reporting problems:

I verified that this loaded the user "dean" from the database as a 
fulcrumUser and it came through with a class type of 
com.jivecast.smartorder.om.TurbineUser rather than the wrapper that the 
turbine security service provided. and now I get a DataBackendException 
error on the grant call...

2017-11-16 17:24:43,722 [http-nio-8080-exec-3] DEBUG avalon - Located 
the service 'org.apache.fulcrum.security.UserManager' in the local container
2017-11-16 17:24:47,895 [http-nio-8080-exec-3] DEBUG 
com.jivecast.smartorder.modules.actions.admin.UserAction - fulcrumUser: 
com.jivecast.smartorder.om.TurbineUser
2017-11-16 17:24:54,147 [http-nio-8080-exec-3] DEBUG avalon.peerManager 
-  get cached 
PeerInstance():com.jivecast.smartorder.om.TurbineGroupPeerImpl@3ccc32c
2017-11-16 17:24:55,750 [http-nio-8080-exec-3] DEBUG avalon.peerManager 
-  get cached 
PeerInstance():com.jivecast.smartorder.om.TurbineRolePeerImpl@1f7f807
2017-11-16 17:24:56,031 [http-nio-8080-exec-3] DEBUG avalon.peerManager 
-  get cached 
PeerInstance():com.jivecast.smartorder.om.TurbineRolePeerImpl@1f7f807
2017-11-16 17:24:56,315 [http-nio-8080-exec-3] DEBUG avalon.peerManager 
-  get cached 
PeerInstance():com.jivecast.smartorder.om.TurbineRolePeerImpl@1f7f807
2017-11-16 17:24:56,599 [http-nio-8080-exec-3] DEBUG avalon.peerManager 
-  get cached 
PeerInstance():com.jivecast.smartorder.om.TurbineGroupPeerImpl@3ccc32c
2017-11-16 17:25:03,129 [http-nio-8080-exec-3] DEBUG avalon.peerManager 
-  get cached 
PeerInstance():com.jivecast.smartorder.om.TurbineGroupPeerImpl@3ccc32c
2017-11-16 17:25:03,143 [http-nio-8080-exec-3] DEBUG avalon.peerManager 
-  get cached 
PeerInstance():com.jivecast.smartorder.om.TurbineRolePeerImpl@1f7f807
2017-11-16 17:25:09,097 [http-nio-8080-exec-3] DEBUG 
com.jivecast.smartorder.modules.actions.admin.UserAction - Adding new 
role to user: inventory
2017-11-16 17:25:10,535 [http-nio-8080-exec-3] DEBUG avalon - Located 
the service 'org.apache.fulcrum.security.ModelManager' in the local 
container
2017-11-16 17:25:10,545 [http-nio-8080-exec-3] DEBUG avalon - Located 
the service 'org.apache.fulcrum.security.RoleManager' in the local container
2017-11-16 17:25:10,547 [http-nio-8080-exec-3] DEBUG avalon.peerManager 
-  get cached 
PeerInstance():com.jivecast.smartorder.om.TurbineRolePeerImpl@1f7f807
2017-11-16 17:25:10,560 [http-nio-8080-exec-3] DEBUG avalon - Located 
the service 'org.apache.fulcrum.security.UserManager' in the local container
2017-11-16 17:25:10,561 [http-nio-8080-exec-3] DEBUG avalon.peerManager 
-  get cached 
PeerInstance():com.jivecast.smartorder.om.TurbineUserPeerImpl@86cedb4
2017-11-16 17:25:10,598 [http-nio-8080-exec-3] DEBUG avalon - Located 
the service 'org.apache.fulcrum.security.GroupManager' in the local 
container
2017-11-16 17:25:10,599 [http-nio-8080-exec-3] DEBUG avalon.peerManager 
-  get cached 
PeerInstance():com.jivecast.smartorder.om.TurbineGroupPeerImpl@3ccc32c
2017-11-16 17:25:25,202 [http-nio-8080-exec-3] ERROR 
com.jivecast.smartorder.modules.actions.admin.UserAction - Error setting 
roles: org.apache.fulcrum.security.util.DataBackendException: 
grant('dean', 'global', 'inventory') failed


any ideas?

--
Jeff



On 11/16/2017 05:00 PM, Jeffery Painter wrote:
>
> Hi Georg,
>
> I am making some good progress.  I don't know if you remember the old 
> flux library for user management, but I have started to re-write that 
> to work with Turbine 4.0.  I am having some troubles however with the 
> grant/revoke roles with casting the user object incorrectly from the 
> TurbineWrapper class.  Can you help me with the issue I am having 
> below?  I looked at the unit tests in the Turbine source for 
> inspiration on migrating, but it isn't recognizing the user class 
> properly.  I even tried to manually downcast (see my code below), and 
> still cannot make it work.
>
> If I can get this all working, I thought it might be useful to publish 
> a new flux library compatible with Turbine-4.0 for user management as 
> a guide to others on how to get started.
>
>
> My logs show the following error when calling the grant/revoke method 
> on the security service when trying to add the "inventory" role to a 
> user:
>
> 2017-11-16 16:49:26,918 [http-nio-8080-exec-13] DEBUG 
> com.jivecast.smartorder.modules.actions.admin.UserAction - Adding new 
> role to user: inventory
>
> 2017-11-16 16:49:26,918 [http-nio-8080-exec-13] DEBUG avalon - Located 
> the service 'org.apache.fulcrum.security.RoleManager' in the local 
> container
> 2017-11-16 16:49:26,918 [http-nio-8080-exec-13] DEBUG 
> avalon.peerManager -  get cached 
> PeerInstance():com.jivecast.smartorder.om.TurbineRolePeerImpl@71897a2b
>
> 2017-11-16 16:49:26,918 [http-nio-8080-exec-13] DEBUG avalon - Located 
> the service 'org.apache.fulcrum.security.UserManager' in the local 
> container
> 2017-11-16 16:49:26,918 [http-nio-8080-exec-13] DEBUG 
> avalon.peerManager -  get cached 
> PeerInstance():com.jivecast.smartorder.om.TurbineUserPeerImpl@448e6624
>
> 2017-11-16 16:49:26,918 [http-nio-8080-exec-13] DEBUG avalon - Located 
> the service 'org.apache.fulcrum.security.GroupManager' in the local 
> container
> 2017-11-16 16:49:26,918 [http-nio-8080-exec-13] DEBUG 
> avalon.peerManager -  get cached 
> PeerInstance():com.jivecast.smartorder.om.TurbineGroupPeerImpl@151d470d
>
> 2017-11-16 16:49:26,919 [http-nio-8080-exec-13] ERROR 
> com.jivecast.smartorder.modules.actions.admin.UserAction - Error 
> setting roles: java.lang.ClassCastException: 
> com.jivecast.smartorder.wrapper.TurbineUserWrapper cannot be cast to 
> org.apache.fulcrum.security.torque.security.TorqueAbstractSecurityEntity
>
>
> Here is the relevant code in my doRoles() method to make the new 
> assignment... it is modeled after the old flux methods:
>
> I have the following import:
>
> import org.apache.turbine.services.security.SecurityService;
>
> and in the body of the class, I use the injection to get the instance 
> mapped
>
>     /** Injected service instance */
>     @TurbineService
>     private SecurityService security;
>
> .... then my action class method is called doRoles() which does the 
> role assignment and fails
>
>     /**
>      * Update the roles that are to assigned to a user for a project.
>      */
>     public void doRoles(PipelineData pipelineData, Context context) 
> throws Exception {
>
>         try {
>
>             RunData data = getRunData(pipelineData);
>
>             // Get the Turbine ACL implementation for our current 
> user, only admin can update user roles
>             TurbineAccessControlList adminAcl = 
> getRunData(data).getACL();
>             if (adminAcl.hasRole("administrator")) {
>
>                 // Username of the account we are updating
>                 String username = 
> data.getParameters().getString("username");
>                 if (security.accountExists(username)) {
>
>                     // Try to downcast for the security grant function
>                     org.apache.turbine.om.security.User user = 
> (org.apache.turbine.om.security.User) security.getUser(username);
>
>                     // Get the Turbine ACL implementation
>                     TurbineAccessControlList acl = security.getACL(user);
>
>                     /*
>                      * Grab all the Groups and Roles in the system.
>                      */
>                     GroupSet groups = security.getAllGroups();
>                     RoleSet roles = security.getAllRoles();
>
>                     for (Group group : groups) {
>                         String groupName = group.getName();
>                         for (Role role : roles) {
>                             String roleName = role.getName();
>
>                             /*
>                              * In the UserRoleForm.vm we made a 
> checkbox for every possible Group/Role
>                              * combination so we will compare every 
> possible combination with the values
>                              * that were checked off in the form. If 
> we have a match then we will grant the
>                              * user the role in the group.
>                              */
>                             String groupRole = groupName + roleName;
>                             String formGroupRole = 
> data.getParameters().getString(groupRole);
>
>                             if (formGroupRole != null && 
> !acl.hasRole(role, group)) {
>                                 // add the role for this user
>                                 if (acl.hasRole(role) == false) {
>                                     log.debug("Adding new role to 
> user: " + role.getName());
>                                     security.grant(user, group, role);
>                                 }
>                             } else if (formGroupRole == null && 
> acl.hasRole(role, group)) {
>                                 // revoke the role for this user
>                                 log.debug("Revoke role: " + 
> role.getName());
>                                 security.revoke(user, group, role);
>                             }
>                         }
>                     }
>
>                 } else {
>                     log.error("User does not exist!");
>                 }
>             } else {
>                 data.setMessage("You do not have access to perform 
> this action.");
>             }
>         } catch (Exception e) {
>             log.error("Error setting roles: " + e.toString());
>         }
>
>     }
>
>

-- 
Jeff Painter

CEO and Founder of JiveCast
Software and analytics, made together
http://jivecast.com

301 Fayetteville St. Unit 2301, Raleigh, NC 27601
(919) 533-9024