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

Reply via email to