Hi Henning,

Just a point of clarification on the changes to extend TurbineUser in
T2.3-dev below.

Below you have your extension classes in the package
"de.intermeta.myapp.security.om" and in a later email to the list you said I
could not reference via foreign key the extended user table unless it was
all in one *-schema.xml file. Does this mean you have all your application
classes in the *.security.om package (!?) as well as the security specific
ones?.

The other problem I have is that if the extended Myapp user table definition
is in your project-schema.xml file and is used to generate the MyappUser and
MyappUserPeer java source then how do you get it to implement the
org.apache.turbine.om.security.peer.UserPeer interface as shown this excerpt
from the tr.props section here
http://jakarta.apache.org/turbine/turbine-2.3/services/security-service.html
:

This is the relevant bit

# This setting is DBSecurityService specific - this class is consulted for
the names
# of the columns in the users' tables for the purpose of creating join
queries.
# If you use your own User implementation in conjunction with
DBSecurityService,
# it's peer class must implement
org.apache.turbine.om.security.peer.UserPeer interface,
# and you need to specify the name of the peer class here.
#
# Default: org.apache.turbine.om.security.peer.TurbineUserPeer
#
services.SecurityService.userPeer.class=org.apache.turbine.om.security.peer.
TurbineUserPeer


Thanks.

David

-----Original Message-----
From: Henning P. Schmiedehausen [mailto:[EMAIL PROTECTED]
Sent: 02 July 2003 14:16
To: [EMAIL PROTECTED]
Subject: Re: Extending user in T2.3


Zamek <[EMAIL PROTECTED]> writes:

>I would like to get a working TR.props file  or a part of TR.prop

>for compensation, I will correct, and comment the documentation.

Ok, the following is cut life out of the application running in the
window behind this one...

--- cut ---
services.SecurityService.classname=org.apache.turbine.services.security.torq
ue.TorqueSecurityService
[...]
# -------------------------------------------------------------------
#
#  S E C U R I T Y  S E R V I C E
#
# -------------------------------------------------------------------

# Default: org.apache.turbine.services.security.db.DBUserManager
services.SecurityService.user.manager =
org.apache.turbine.services.security.torque.TorqueUserManager

# This is the class that implements the ACL interface.
services.SecurityService.acl.class =
org.apache.turbine.util.security.TurbineAccessControlList

#
# Configure Object Classes in the Security Service
#

# Custom User
services.SecurityService.user.class = de.intermeta.myapp.security.MyAppUser

services.SecurityService.group.class =
org.apache.turbine.services.security.torque.TorqueGroup
services.SecurityService.permission.class =
org.apache.turbine.services.security.torque.TorquePermission
services.SecurityService.role.class =
org.apache.turbine.services.security.torque.TorqueRole

#
# Configure Peers for the Torque Security Service
#
services.SecurityService.torque.userPeer.class =
de.intermeta.myapp.security.om.MyappUserPeer
services.SecurityService.torque.groupPeer.class =
de.intermeta.myapp.security.om.MyappGroupPeer
services.SecurityService.torque.permissionPeer.class =
de.intermeta.myapp.security.om.MyappPermissionPeer
services.SecurityService.torque.rolePeer.class =
de.intermeta.myapp.security.om.MyappRolePeer

[...]

--- cut ---

--- cut --- myapp-schema.xml ---
<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
<!DOCTYPE database SYSTEM
"http://jakarta.apache.org/turbine/dtd/database_3_1.dtd";>

<database name="myapp"
  defaultIdMethod="idbroker"
  defaultJavaType="primitive"
  defaultJavaNamingMethod="underscore"
  package="de.intermeta.myapp.security.om">

  <table name="MYAPP_USER" idMethod="idbroker">
    <column name="USER_ID" required="true" primaryKey="true"
type="INTEGER"/>
    <column name="LOGIN_NAME" required="true" size="64" type="VARCHAR"
javaName="UserName"/>
    <column name="PASSWORD_VALUE" required="true" size="16" type="VARCHAR"
javaName="Password"/>
    <column name="FIRST_NAME" required="true" size="64" type="VARCHAR"/>
    <column name="LAST_NAME" required="true" size="64" type="VARCHAR"/>
    <column name="EMAIL" size="64" type="VARCHAR"/>
    <column name="CONFIRM_VALUE" size="16" type="VARCHAR"
javaName="Confirmed"/>
    <column name="MODIFIED" type="TIMESTAMP" size="0"/>
    <column name="CREATED" type="TIMESTAMP" size="0" javaName="CreateDate"/>
    <column name="LAST_LOGIN" type="TIMESTAMP" size="0"/>
    <column name="OBJECTDATA" type="VARBINARY"/>

<!-- Myapp Erweiterungen -->

    <!-- Aktuell ausgewaehlte Sprachversion -->
    <column name="MYAPP_LANGUAGE_ID" type="INTEGER" javaName="LanguageId"/>
    <!-- Aktuell ausgewaehlte Gruppe -->
    <column name="MYAPP_GRUPPEN_ID" type="INTEGER" javaName="GruppenId"/>

    <unique>
        <unique-column name="LOGIN_NAME"/>
    </unique>

  </table>

  <table name="MYAPP_PERMISSION" idMethod="idbroker">
    <column name="PERMISSION_ID" required="true" primaryKey="true"
type="INTEGER"/>
    <column name="PERMISSION_NAME" required="true" size="64" type="VARCHAR"
javaName="Name"/>

    <unique>
      <unique-column name="PERMISSION_NAME"/>
    </unique>

  </table>

  <table name="MYAPP_ROLE" idMethod="idbroker">
    <column name="ROLE_ID" required="true" primaryKey="true"
type="INTEGER"/>
    <column name="ROLE_NAME" required="true" size="64" type="VARCHAR"
javaName="Name"/>

    <unique>
        <unique-column name="ROLE_NAME"/>
    </unique>

  </table>

  <table name="MYAPP_GROUP" idMethod="idbroker">
    <column name="GROUP_ID" required="true" primaryKey="true"
type="INTEGER"/>
    <column name="GROUP_NAME" required="true" type="VARCHAR" size="64"
javaName="Name"/>

    <unique>
        <unique-column name="GROUP_NAME"/>
    </unique>

  </table>

  <table name="TURBINE_ROLE_PERMISSION">
    <column name="ROLE_ID" required="true" primaryKey="true"
type="INTEGER"/>
    <column name="PERMISSION_ID" required="true" primaryKey="true"
type="INTEGER"/>

    <foreign-key foreignTable="MYAPP_ROLE">
      <reference local="ROLE_ID" foreign="ROLE_ID"/>
    </foreign-key>

    <foreign-key foreignTable="MYAPP_PERMISSION">
      <reference local="PERMISSION_ID" foreign="PERMISSION_ID"/>
    </foreign-key>
  </table>

  <table name="TURBINE_USER_GROUP_ROLE">
    <column name="USER_ID" required="true" primaryKey="true"
type="INTEGER"/>
    <column name="GROUP_ID" required="true" primaryKey="true"
type="INTEGER"/>
    <column name="ROLE_ID" required="true" primaryKey="true"
type="INTEGER"/>

    <foreign-key foreignTable="MYAPP_USER">
      <reference local="USER_ID" foreign="USER_ID"/>
    </foreign-key>

    <foreign-key foreignTable="MYAPP_GROUP">
      <reference local="GROUP_ID" foreign="GROUP_ID"/>
    </foreign-key>

    <foreign-key foreignTable="MYAPP_ROLE">
      <reference local="ROLE_ID" foreign="ROLE_ID"/>
    </foreign-key>
  </table>

</database>
--- cut --- myapp-schema.xml ---


--- cut --- MyAppUser.java ---
package de.intermeta.myapp.security;

import org.apache.turbine.services.security.torque.TorqueUser;

import de.intermeta.myapp.security.om.MyappUser;

public class MyAppUser
        extends TorqueUser
{
    /**
     * Constructor.
     */
    public MyAppUser()
    {
        super();
    }

    /**
     * This Constructor is used when the UserPeerManager
     * has retrieved a list of Database Objects from the peer and
     * must 'wrap' them into TorqueRole Objects. You should not use it
directly!
     *
     * @param obj An Object from the peer
     */
    public MyAppUser(Persistent obj)
    {
        super(obj);
    }


    public int getLanguageId()
    {
        return ((MyappUser) getPersistentObj()).getLanguageId();
    }

    public void setLanguageId(int languageId)
    {
        ((MyappUser) getPersistentObj()).setLanguageId(languageId);
    }

    public int getGruppenId()
    {
        return ((MyappUser) getPersistentObj()).getGruppenId();
    }

    public void setGruppenId(int gruppenId)
    {
        ((MyappUser) getPersistentObj()).setGruppenId(gruppenId);
    }
}
--- cut --- MyAppUser.java ---

- Run the schema, you should get de.intermeta.myapp.security.om.<lots of
classes>
- add de.intermeta.maxpatch.myapp.security.MyAppUser.java
- configure Turbine as described above
- create the tables with maven torque:sql, put them into a database (I use
PostgreSQL).

Insert some data into the tables:

--- cut ---
INSERT INTO MYAPP_USER
(USER_ID,LOGIN_NAME,PASSWORD_VALUE,FIRST_NAME,LAST_NAME)
    VALUES (1,'turbine','turbine','Mr.','Turbine');

INSERT INTO MYAPP_PERMISSION (PERMISSION_ID,PERMISSION_NAME)
    VALUES (1,'Myapp');

INSERT INTO MYAPP_ROLE (ROLE_ID,ROLE_NAME)
    VALUES (1,'MyappAdmin');


INSERT INTO MYAPP_GROUP (GROUP_ID,GROUP_NAME)
    VALUES (1,'global');


INSERT INTO MYAPP_GROUP (GROUP_ID,GROUP_NAME)
    VALUES (2,'Myapp');


INSERT INTO TURBINE_ROLE_PERMISSION (ROLE_ID,PERMISSION_ID)
    VALUES (1,1);


INSERT INTO TURBINE_USER_GROUP_ROLE (USER_ID,GROUP_ID,ROLE_ID)
    VALUES (1,2,1);

--- cut ---

Now you should be able to log on with user "turbine" , pw "turbine".

        Regards
                Henning




--
Dipl.-Inf. (Univ.) Henning P. Schmiedehausen          INTERMETA GmbH
[EMAIL PROTECTED]        +49 9131 50 654 0   http://www.intermeta.de/

Java, perl, Solaris, Linux, xSP Consulting, Web Services
freelance consultant -- Jakarta Turbine Development  -- hero for hire

--- Quote of the week: "It is pointless to tell people anything when
you know that they won't process the message." --- Jonathan Revusky

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to