You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@turbine.apache.org by David Wynter <da...@btclick.com> on 2001/10/11 19:35:26 UTC

Problem with Group object

Gents,

1. I am attempting to prime the database with one group and a couple of
roles with one permission each. I do not need the full flux control over
those entities. I have my own User page that uses a pull tool to get a list
of the roles that my users can play. The problem lies in setting up a Group,
it does not work and the subsequent TurbineSecurity.grant(...) fails. I
assume because the Group I am trying to use is not there. The DatabasePrimer
runs as a TurbineBaseService. An excerpt from the code I use in
DatabasePrimer is:
....
	  log("Installing role, permission records into database");

        String password = new String ("blahin");

		try {
			Permission adminperm = TurbineSecurity.getNewPermission("Admin");
			Permission  msguserperm = TurbineSecurity.getNewPermission("MsgUser");
			Role adminrole = TurbineSecurity.getNewRole("Administrator");
			Role msguserrole = TurbineSecurity.getNewRole("Message User");
			Group rwtgroup = TurbineSecurity.getNewGroup("global"); <----here I tried
'Group.GLOBAL_GROUP_NAME' also
			User adminuser = new TurbineUser();
			try {
				TurbineSecurity.addPermission(adminperm);
			}
			catch (EntityExistsException eee1) {
				// It exists so that is good
				sLogger.debug("DatabasePrimer: "+eee1.toString());
			}
			try {
				TurbineSecurity.addRole(adminrole);
			}
			catch (EntityExistsException eee2) {
				// It exists so that is good
				sLogger.debug("DatabasePrimer: "+eee2.toString());
			}
			try {
				TurbineSecurity.addPermission(msguserperm);
			}
			catch (EntityExistsException eee3) {
				// It exists so that is good
				sLogger.debug("DatabasePrimer: "+eee3.toString());
			}
			try {
				TurbineSecurity.addRole(msguserrole);
			}
			catch (EntityExistsException eee4) {
				// It exists so that is good
				sLogger.debug("DatabasePrimer: "+eee4.toString());
			}
        	if (TurbineSecurity.accountExists(username))
        	{
        		adminuser = TurbineSecurity.getUser(username);
				sLogger.debug("DatabasePrimer: Administrator user already exists");
	        }
        	else
       		{
	            Date now = new Date();

	            adminuser.setUserName("Admin");
	            adminuser.setCreateDate(now);
	            adminuser.setLastLogin(new Date(0));

	            TurbineSecurity.addUser(adminuser, password);
	        }
			// Assume that grant is benign if adminuser exists with this role
			TurbineSecurity.grant(adminuser, rwtgroup, adminrole);
		}
		catch (EntityExistsException eee) {
etc.

I get the error:
DatabasePrimer:  org.apache.turbine.util.security.DataBackendException:
grant(User,Group,Role) failed: General error: Column 'GROUP_ID' cannot be
null
The method TurbineSecurity.getNewGroup("global") does not perform as defined
in the javadoc. According to the javadocs it should return the object
associated with that name or if there is none then create one with that
name. Any work around here.

2. I notice from the turbine.log that DatabasePrimer gets runs twice, one
second apart, during initialisation. This is it's entry in
turbineresources.properties.
services.DatabasePrimer.classname=com.roamware.rwtransform.services.Database
Primer

Any reason for this?

Thanks,

David



---------------------------------------------------------------------
To unsubscribe, e-mail: turbine-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: turbine-user-help@jakarta.apache.org


Re: Problem with Group object

Posted by Jason Grant <ja...@logular.com>.
Hi David,

The getNewXXX() methods provide you with an object with uninitialised 
primary keys, since they haven't been written to the database.  When 
these objects are passed to TurbineSecurity.grant() it fails because of 
the absent keys.

I've attached code that should do the trick.

J.

    public void init( Object data )
        throws InitializationException
    {
		super.init(data);
        String password = new String ("blahin");

		try 
		{
			String ADMIN_PERMISSION="Admin";
			String MSGUSER_PERMISSION="MsgUser";
			String ADMIN_ROLE="Administrator";
			String MSGUSER_ROLE="Message User";
			String USER_NAME="Admin";
			
			Permission adminPermission = null;
			Permission  msguserPermission = null;
			Role adminRole = null;
			Role msguserRole = null;

			User adminUser = new TurbineUser();


			Group rwtgroup=null;
			try 
			{
				rwtgroup=TurbineSecurity.getGlobalGroup();
			}
			catch(Exception e)
			{
				logError("Unable to get global group", e);
				return;
			}

			try 
			{
				adminPermission=TurbineSecurity.createPermission(ADMIN_PERMISSION);
			}
			catch (EntityExistsException eee1) 
			{
				adminPermission=TurbineSecurity.getPermission(ADMIN_PERMISSION);
			}

			try 
			{
				TurbineSecurity.addRole(adminRole);
				adminRole=TurbineSecurity.getRole(ADMIN_ROLE);
			}
			catch (EntityExistsException e) 
			{
				adminRole=TurbineSecurity.getRole(ADMIN_ROLE);
			}


			try 
			{
				
msguserPermission=TurbineSecurity.createPermission(MSGUSER_PERMISSION);
			}
			catch (EntityExistsException e) 
			{
				msguserPermission=TurbineSecurity.getPermission(MSGUSER_PERMISSION);
			}

			try 
			{
				TurbineSecurity.addRole(msguserRole);
				msguserRole=TurbineSecurity.getRole(MSGUSER_ROLE);
			}
			catch (EntityExistsException e) 
			{
				msguserRole=TurbineSecurity.getRole(MSGUSER_ROLE);
			}

        	if (TurbineSecurity.accountExists(USER_NAME))
        	{
				log("Administrator user already exists");
	        }
        	else
       		{
	            Date now = new Date();

	            adminUser.setUserName("Admin");
	            adminUser.setCreateDate(now);
	            adminUser.setLastLogin(new Date(0));

	            TurbineSecurity.addUser(adminUser, password);
	        }

        	adminUser = TurbineSecurity.getUser(USER_NAME);

			try 
			{
				TurbineSecurity.grant(adminUser, rwtgroup, adminRole);
				log("New group and role granted to admin user");

			}
			catch(Exception e)
			{
				log("Unable to grant group and role to admin user.  This relationship 
may already exist");
			}

		}
		catch (Exception e) 
		{
			logError("Unable to configure users", e);
		}
	}



>>>>>>>>>>>>>>>>>> Original Message <<<<<<<<<<<<<<<<<<

On 10/12/01, 3:35:26 AM, "David Wynter" <da...@btclick.com> wrote 
regarding Problem with Group object:


> Gents,

> 1. I am attempting to prime the database with one group and a couple of
> roles with one permission each. I do not need the full flux control over
> those entities. I have my own User page that uses a pull tool to get a 
list
> of the roles that my users can play. The problem lies in setting up a 
Group,
> it does not work and the subsequent TurbineSecurity.grant(...) fails. I
> assume because the Group I am trying to use is not there. The 
DatabasePrimer
> runs as a TurbineBaseService. An excerpt from the code I use in
> DatabasePrimer is:
> ....
>         log("Installing role, permission records into database");

>         String password = new String ("blahin");

>               try {
>                       Permission adminperm = 
TurbineSecurity.getNewPermission("Admin");
>                       Permission  msguserperm = 
TurbineSecurity.getNewPermission("MsgUser");
>                       Role adminrole = 
TurbineSecurity.getNewRole("Administrator");
>                       Role msguserrole = 
TurbineSecurity.getNewRole("Message User");
>                       Group rwtgroup = 
TurbineSecurity.getNewGroup("global"); <----here I tried
> 'Group.GLOBAL_GROUP_NAME' also
>                       User adminuser = new TurbineUser();
>                       try {
>                               TurbineSecurity.addPermission(adminperm);
>                       }
>                       catch (EntityExistsException eee1) {
>                               // It exists so that is good
>                               sLogger.debug("DatabasePrimer: 
"+eee1.toString());
>                       }
>                       try {
>                               TurbineSecurity.addRole(adminrole);
>                       }
>                       catch (EntityExistsException eee2) {
>                               // It exists so that is good
>                               sLogger.debug("DatabasePrimer: 
"+eee2.toString());
>                       }
>                       try {
>                               TurbineSecurity.addPermission(msguserperm);
>                       }
>                       catch (EntityExistsException eee3) {
>                               // It exists so that is good
>                               sLogger.debug("DatabasePrimer: 
"+eee3.toString());
>                       }
>                       try {
>                               TurbineSecurity.addRole(msguserrole);
>                       }
>                       catch (EntityExistsException eee4) {
>                               // It exists so that is good
>                               sLogger.debug("DatabasePrimer: 
"+eee4.toString());
>                       }
>               if (TurbineSecurity.accountExists(username))
>               {
>                       adminuser = TurbineSecurity.getUser(username);
>                               sLogger.debug("DatabasePrimer: 
Administrator user already exists");
>               }
>               else
>                       {
>                   Date now = new Date();

>                   adminuser.setUserName("Admin");
>                   adminuser.setCreateDate(now);
>                   adminuser.setLastLogin(new Date(0));

>                   TurbineSecurity.addUser(adminuser, password);
>               }
>                       // Assume that grant is benign if adminuser exists 
with this role
>                       TurbineSecurity.grant(adminuser, rwtgroup, 
adminrole);
>               }
>               catch (EntityExistsException eee) {
> etc.

> I get the error:
> DatabasePrimer:  org.apache.turbine.util.security.DataBackendException:
> grant(User,Group,Role) failed: General error: Column 'GROUP_ID' cannot be
> null
> The method TurbineSecurity.getNewGroup("global") does not perform as 
defined
> in the javadoc. According to the javadocs it should return the object
> associated with that name or if there is none then create one with that
> name. Any work around here.

> 2. I notice from the turbine.log that DatabasePrimer gets runs twice, one
> second apart, during initialisation. This is it's entry in
> turbineresources.properties.
> 
services.DatabasePrimer.classname=com.roamware.rwtransform.services.Databa
se
> Primer

> Any reason for this?

> Thanks,

> David



> ---------------------------------------------------------------------
> To unsubscribe, e-mail: turbine-user-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: turbine-user-help@jakarta.apache.org

---------------------------------------------------------------------
To unsubscribe, e-mail: turbine-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: turbine-user-help@jakarta.apache.org