[xwiki-devs] Creating groups and adding users to them
Hi, sorry for being thick, but I can't find any documentation at all how to do this in Java and I still need some help with this. In our authenticator I'd like to check if users coming from a certain angle (i can check on that through cookies) are in a special group. If they are not, I'd like to add the to this group. Furthermore this group needs to asserted of, so I need to be able to reliably find out if it does exist and if not, create it. So far I've been frustrated by failure by attempting to use the XWikiGroupService to achieve this. Also I don't seem to be able to find a clean documentation on how users and groups and done in XWikI (in java, especially). Is there such documentation? The following code, to much bewilderment, creates a USER?! public void checkPortalGroup(XWikiContext context) { if (!_portalGroupChecked) { try { boolean groupExists = false; List<String> groupList = context.getWiki().getGroupService(context).listAllGroups(context); for (ListIterator<String> groups = groupList.listIterator(); groups.hasNext() && !groupExists;) { groupExists = groups.next().equals(PORTAL_GROUP_NAME); } if (!groupExists) { log.info("Group "+PORTAL_GROUP_NAME+" does not exist and will be created."); BaseCollection portalGroup = context.getWiki().getGroupClass(context).newObject(context); portalGroup.setName(PORTAL_GROUP_NAME); context.getWiki().getHibernateStore().saveXWikiObject((BaseObject) portalGroup, context, true); } } catch (XWikiException e) { log.error("Exception while locating or creating group "+PORTAL_GROUP_NAME+" : "+e.getMessage()); e.printStackTrace(); } _portalGroupChecked=true; } } I need some serious pointers on how the xwiki objects/classes thing is supposed to work for users/groups. Thanks a lot, J.L.Simon
Hi, The best documentation right now is to look at existing authenticators like XWikiLDAPAuthServiceImpl which create/update users and add/remove users from groups. On Tue, Feb 3, 2009 at 3:25 PM, Juergen Lorenz Simon <[email protected]> wrote:
Hi,
sorry for being thick, but I can't find any documentation at all how to do this in Java and I still need some help with this.
In our authenticator I'd like to check if users coming from a certain angle (i can check on that through cookies) are in a special group. If they are not, I'd like to add the to this group.
Furthermore this group needs to asserted of, so I need to be able to reliably find out if it does exist and if not, create it.
So far I've been frustrated by failure by attempting to use the XWikiGroupService to achieve this. Also I don't seem to be able to find a clean documentation on how users and groups and done in XWikI (in java, especially). Is there such documentation?
The following code, to much bewilderment, creates a USER?!
public void checkPortalGroup(XWikiContext context) { if (!_portalGroupChecked) { try { boolean groupExists = false; List<String> groupList = context.getWiki().getGroupService(context).listAllGroups(context); for (ListIterator<String> groups = groupList.listIterator(); groups.hasNext() && !groupExists;) { groupExists = groups.next().equals(PORTAL_GROUP_NAME); } if (!groupExists) { log.info("Group "+PORTAL_GROUP_NAME+" does not exist and will be created."); BaseCollection portalGroup = context.getWiki().getGroupClass(context).newObject(context); portalGroup.setName(PORTAL_GROUP_NAME);
context.getWiki().getHibernateStore().saveXWikiObject((BaseObject) portalGroup, context, true); } } catch (XWikiException e) { log.error("Exception while locating or creating group "+PORTAL_GROUP_NAME+" : "+e.getMessage()); e.printStackTrace(); } _portalGroupChecked=true; } }
I need some serious pointers on how the xwiki objects/classes thing is supposed to work for users/groups.
Thanks a lot, J.L.Simon _______________________________________________ devs mailing list [email protected] http://lists.xwiki.org/mailman/listinfo/devs
-- Thomas Mortagne
On 03.02.2009, at 16:08, Thomas Mortagne wrote:
Hi,
The best documentation right now is to look at existing authenticators like XWikiLDAPAuthServiceImpl which create/update users and add/remove users from groups.
Unfortunately, the existing authenticator implementations do not seem to create groups and assign users to them. The current code works somewhat, but it has one big problem! The following methods produce flaky results at best: XWikiGroupService gService = context.getWiki().getGroupService(context); boolean groupHasUser = gService.getAllGroupsNamesForMember(user, 100, 0, context).contains("XWiki."+PORTAL_GROUP_NAME); boolean userInGroup = gService.getAllMatchedMembersNamesForGroup("XWiki."+PORTAL_GROUP_NAME, null, 1000000, 0, true, context).contains(user); many times, both calls suggest that the user is not in the group! Even if he is! Which means that the user is added to the group many, many times! The first call to gService is the most unreliable, but I would prefer it to the second call, since we're talking a potential 10.000 users or more. I don't want to lug around collections with 10k+ objects just to check if the user is in the group? Help!
On Tue, Feb 3, 2009 at 3:25 PM, Juergen Lorenz Simon <[email protected]
wrote: Hi,
sorry for being thick, but I can't find any documentation at all how to do this in Java and I still need some help with this.
In our authenticator I'd like to check if users coming from a certain angle (i can check on that through cookies) are in a special group. If they are not, I'd like to add the to this group.
Furthermore this group needs to asserted of, so I need to be able to reliably find out if it does exist and if not, create it.
So far I've been frustrated by failure by attempting to use the XWikiGroupService to achieve this. Also I don't seem to be able to find a clean documentation on how users and groups and done in XWikI (in java, especially). Is there such documentation?
The following code, to much bewilderment, creates a USER?!
public void checkPortalGroup(XWikiContext context) { if (!_portalGroupChecked) { try { boolean groupExists = false; List<String> groupList = context.getWiki().getGroupService(context).listAllGroups(context); for (ListIterator<String> groups = groupList.listIterator(); groups.hasNext() && !groupExists;) { groupExists = groups.next().equals(PORTAL_GROUP_NAME); } if (!groupExists) { log.info("Group "+PORTAL_GROUP_NAME+" does not exist and will be created."); BaseCollection portalGroup = context.getWiki().getGroupClass(context).newObject(context); portalGroup.setName(PORTAL_GROUP_NAME);
context.getWiki().getHibernateStore().saveXWikiObject((BaseObject) portalGroup, context, true); } } catch (XWikiException e) { log.error("Exception while locating or creating group "+PORTAL_GROUP_NAME+" : "+e.getMessage()); e.printStackTrace(); } _portalGroupChecked=true; } }
I need some serious pointers on how the xwiki objects/classes thing is supposed to work for users/groups.
Thanks a lot, J.L.Simon _______________________________________________ devs mailing list [email protected] http://lists.xwiki.org/mailman/listinfo/devs
-- Thomas Mortagne _______________________________________________ devs mailing list [email protected] http://lists.xwiki.org/mailman/listinfo/devs
On Tue, Feb 3, 2009 at 5:17 PM, Juergen Lorenz Simon <[email protected]> wrote:
On 03.02.2009, at 16:08, Thomas Mortagne wrote:
Hi,
The best documentation right now is to look at existing authenticators like XWikiLDAPAuthServiceImpl which create/update users and add/remove users from groups.
Unfortunately, the existing authenticator implementations do not seem to create groups and assign users to them. The current code works somewhat, but it has one
LDAP authenticator does not create groups but it assign users to them, and when I say it does not create groups it just means it specifically avoid adding users to not existing groups since technically an empty group does not really exists. A groups is a wiki page containg objects of class XWiki.XWikiGroups each object representing a member (a user or a sub-group). Look at XWikiLDAPAuthServiceImpl#addUserToXWikiGroup to see exactly what means adding a user in a group. If you want to check if a user is in a group simply look if this group's document contains the member object for this user object.
big problem! The following methods produce flaky results at best:
XWikiGroupService gService = context.getWiki().getGroupService(context); boolean groupHasUser = gService.getAllGroupsNamesForMember(user, 100, 0, context).contains("XWiki."+PORTAL_GROUP_NAME); boolean userInGroup = gService.getAllMatchedMembersNamesForGroup("XWiki."+PORTAL_GROUP_NAME, null, 1000000, 0, true, context).contains(user);
many times, both calls suggest that the user is not in the group! Even if he is! Which means that the user is added to the group many, many times! The first call to gService is the most unreliable, but I would prefer it to the second call, since we're talking a potential 10.000 users or more. I don't want to lug around collections with 10k+ objects just to check if the user is in the group?
Help!
On Tue, Feb 3, 2009 at 3:25 PM, Juergen Lorenz Simon <[email protected]
wrote: Hi,
sorry for being thick, but I can't find any documentation at all how to do this in Java and I still need some help with this.
In our authenticator I'd like to check if users coming from a certain angle (i can check on that through cookies) are in a special group. If they are not, I'd like to add the to this group.
Furthermore this group needs to asserted of, so I need to be able to reliably find out if it does exist and if not, create it.
So far I've been frustrated by failure by attempting to use the XWikiGroupService to achieve this. Also I don't seem to be able to find a clean documentation on how users and groups and done in XWikI (in java, especially). Is there such documentation?
The following code, to much bewilderment, creates a USER?!
public void checkPortalGroup(XWikiContext context) { if (!_portalGroupChecked) { try { boolean groupExists = false; List<String> groupList = context.getWiki().getGroupService(context).listAllGroups(context); for (ListIterator<String> groups = groupList.listIterator(); groups.hasNext() && !groupExists;) { groupExists = groups.next().equals(PORTAL_GROUP_NAME); } if (!groupExists) { log.info("Group "+PORTAL_GROUP_NAME+" does not exist and will be created."); BaseCollection portalGroup = context.getWiki().getGroupClass(context).newObject(context); portalGroup.setName(PORTAL_GROUP_NAME);
context.getWiki().getHibernateStore().saveXWikiObject((BaseObject) portalGroup, context, true); } } catch (XWikiException e) { log.error("Exception while locating or creating group "+PORTAL_GROUP_NAME+" : "+e.getMessage()); e.printStackTrace(); } _portalGroupChecked=true; } }
I need some serious pointers on how the xwiki objects/classes thing is supposed to work for users/groups.
Thanks a lot, J.L.Simon _______________________________________________ devs mailing list [email protected] http://lists.xwiki.org/mailman/listinfo/devs
-- Thomas Mortagne _______________________________________________ devs mailing list [email protected] http://lists.xwiki.org/mailman/listinfo/devs
_______________________________________________ devs mailing list [email protected] http://lists.xwiki.org/mailman/listinfo/devs
-- Thomas Mortagne
Hi, from the hints I managed to cobble together a piece of code that works. Another problem was presented by the multithreading that happened when a user opened several iFrames containing XWiki pages at the same time. This led to the weird behaviour of stuff changing while I was processing the user. Thanks, J.L.Simon On 03.02.2009, at 19:41, Thomas Mortagne wrote:
On Tue, Feb 3, 2009 at 5:17 PM, Juergen Lorenz Simon <[email protected]
wrote:
On 03.02.2009, at 16:08, Thomas Mortagne wrote:
Hi,
The best documentation right now is to look at existing authenticators like XWikiLDAPAuthServiceImpl which create/update users and add/ remove users from groups.
Unfortunately, the existing authenticator implementations do not seem to create groups and assign users to them. The current code works somewhat, but it has one
LDAP authenticator does not create groups but it assign users to them, and when I say it does not create groups it just means it specifically avoid adding users to not existing groups since technically an empty group does not really exists. A groups is a wiki page containg objects of class XWiki.XWikiGroups each object representing a member (a user or a sub-group).
Look at XWikiLDAPAuthServiceImpl#addUserToXWikiGroup to see exactly what means adding a user in a group. If you want to check if a user is in a group simply look if this group's document contains the member object for this user object.
big problem! The following methods produce flaky results at best:
XWikiGroupService gService = context.getWiki().getGroupService(context); boolean groupHasUser = gService.getAllGroupsNamesForMember(user, 100, 0, context).contains("XWiki."+PORTAL_GROUP_NAME); boolean userInGroup = gService .getAllMatchedMembersNamesForGroup("XWiki."+PORTAL_GROUP_NAME, null, 1000000, 0, true, context).contains(user);
many times, both calls suggest that the user is not in the group! Even if he is! Which means that the user is added to the group many, many times! The first call to gService is the most unreliable, but I would prefer it to the second call, since we're talking a potential 10.000 users or more. I don't want to lug around collections with 10k+ objects just to check if the user is in the group?
Help!
On Tue, Feb 3, 2009 at 3:25 PM, Juergen Lorenz Simon <[email protected]
wrote: Hi,
sorry for being thick, but I can't find any documentation at all how to do this in Java and I still need some help with this.
In our authenticator I'd like to check if users coming from a certain angle (i can check on that through cookies) are in a special group. If they are not, I'd like to add the to this group.
Furthermore this group needs to asserted of, so I need to be able to reliably find out if it does exist and if not, create it.
So far I've been frustrated by failure by attempting to use the XWikiGroupService to achieve this. Also I don't seem to be able to find a clean documentation on how users and groups and done in XWikI (in java, especially). Is there such documentation?
The following code, to much bewilderment, creates a USER?!
public void checkPortalGroup(XWikiContext context) { if (!_portalGroupChecked) { try { boolean groupExists = false; List<String> groupList = context.getWiki().getGroupService(context).listAllGroups(context); for (ListIterator<String> groups = groupList.listIterator(); groups.hasNext() && !groupExists;) { groupExists = groups.next().equals(PORTAL_GROUP_NAME); } if (!groupExists) { log.info("Group "+PORTAL_GROUP_NAME+" does not exist and will be created."); BaseCollection portalGroup = context.getWiki().getGroupClass(context).newObject(context); portalGroup.setName(PORTAL_GROUP_NAME);
context.getWiki().getHibernateStore().saveXWikiObject((BaseObject) portalGroup, context, true); } } catch (XWikiException e) { log.error("Exception while locating or creating group "+PORTAL_GROUP_NAME+" : "+e.getMessage()); e.printStackTrace(); } _portalGroupChecked=true; } }
I need some serious pointers on how the xwiki objects/classes thing is supposed to work for users/groups.
Thanks a lot, J.L.Simon _______________________________________________ devs mailing list [email protected] http://lists.xwiki.org/mailman/listinfo/devs
-- Thomas Mortagne _______________________________________________ devs mailing list [email protected] http://lists.xwiki.org/mailman/listinfo/devs
_______________________________________________ devs mailing list [email protected] http://lists.xwiki.org/mailman/listinfo/devs
-- Thomas Mortagne _______________________________________________ devs mailing list [email protected] http://lists.xwiki.org/mailman/listinfo/devs
Hi Juergen, Cool. Glad you succeeded. If you get some time it would be great if you could create some documentation on xwiki.org (in the Dev Guide for example) on how to manipulate users/groups so that others can get that information from the doc and not have to go through all the hoops you had to go through. Thanks -Vincent On Feb 4, 2009, at 12:06 PM, Juergen Lorenz Simon wrote:
Hi,
from the hints I managed to cobble together a piece of code that works. Another problem was presented by the multithreading that happened when a user opened several iFrames containing XWiki pages at the same time. This led to the weird behaviour of stuff changing while I was processing the user.
Thanks, J.L.Simon
On 03.02.2009, at 19:41, Thomas Mortagne wrote:
On Tue, Feb 3, 2009 at 5:17 PM, Juergen Lorenz Simon <[email protected]
wrote:
On 03.02.2009, at 16:08, Thomas Mortagne wrote:
Hi,
The best documentation right now is to look at existing authenticators like XWikiLDAPAuthServiceImpl which create/update users and add/ remove users from groups.
Unfortunately, the existing authenticator implementations do not seem to create groups and assign users to them. The current code works somewhat, but it has one
LDAP authenticator does not create groups but it assign users to them, and when I say it does not create groups it just means it specifically avoid adding users to not existing groups since technically an empty group does not really exists. A groups is a wiki page containg objects of class XWiki.XWikiGroups each object representing a member (a user or a sub-group).
Look at XWikiLDAPAuthServiceImpl#addUserToXWikiGroup to see exactly what means adding a user in a group. If you want to check if a user is in a group simply look if this group's document contains the member object for this user object.
big problem! The following methods produce flaky results at best:
XWikiGroupService gService = context.getWiki().getGroupService(context); boolean groupHasUser = gService.getAllGroupsNamesForMember(user, 100, 0, context).contains("XWiki."+PORTAL_GROUP_NAME); boolean userInGroup = gService .getAllMatchedMembersNamesForGroup("XWiki."+PORTAL_GROUP_NAME, null, 1000000, 0, true, context).contains(user);
many times, both calls suggest that the user is not in the group! Even if he is! Which means that the user is added to the group many, many times! The first call to gService is the most unreliable, but I would prefer it to the second call, since we're talking a potential 10.000 users or more. I don't want to lug around collections with 10k+ objects just to check if the user is in the group?
Help!
On Tue, Feb 3, 2009 at 3:25 PM, Juergen Lorenz Simon <[email protected]
wrote: Hi,
sorry for being thick, but I can't find any documentation at all how to do this in Java and I still need some help with this.
In our authenticator I'd like to check if users coming from a certain angle (i can check on that through cookies) are in a special group. If they are not, I'd like to add the to this group.
Furthermore this group needs to asserted of, so I need to be able to reliably find out if it does exist and if not, create it.
So far I've been frustrated by failure by attempting to use the XWikiGroupService to achieve this. Also I don't seem to be able to find a clean documentation on how users and groups and done in XWikI (in java, especially). Is there such documentation?
The following code, to much bewilderment, creates a USER?!
public void checkPortalGroup(XWikiContext context) { if (!_portalGroupChecked) { try { boolean groupExists = false; List<String> groupList = context.getWiki().getGroupService(context).listAllGroups(context); for (ListIterator<String> groups = groupList.listIterator(); groups.hasNext() && !groupExists;) { groupExists = groups.next().equals(PORTAL_GROUP_NAME); } if (!groupExists) { log.info("Group "+PORTAL_GROUP_NAME+" does not exist and will be created."); BaseCollection portalGroup = context.getWiki().getGroupClass(context).newObject(context); portalGroup.setName(PORTAL_GROUP_NAME);
context.getWiki().getHibernateStore().saveXWikiObject((BaseObject) portalGroup, context, true); } } catch (XWikiException e) { log.error("Exception while locating or creating group "+PORTAL_GROUP_NAME+" : "+e.getMessage()); e.printStackTrace(); } _portalGroupChecked=true; } }
I need some serious pointers on how the xwiki objects/classes thing is supposed to work for users/groups.
Thanks a lot, J.L.Simon _______________________________________________ devs mailing list [email protected] http://lists.xwiki.org/mailman/listinfo/devs
-- Thomas Mortagne
participants (3)
-
Juergen Lorenz Simon -
Thomas Mortagne -
Vincent Massol