On Tue, Feb 3, 2009 at 5:17 PM, Juergen Lorenz Simon <simon(a)webtecc.com> 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 <simon(a)webtecc.com
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
devs(a)xwiki.org
http://lists.xwiki.org/mailman/listinfo/devs
--
Thomas Mortagne
_______________________________________________
devs mailing list
devs(a)xwiki.org
http://lists.xwiki.org/mailman/listinfo/devs
_______________________________________________
devs mailing list
devs(a)xwiki.org
http://lists.xwiki.org/mailman/listinfo/devs
--
Thomas Mortagne