Hello all,
The rights manager patch is done. It works fine but there are some small
problems:
- the css does not look extraordinary because I did not have enought
time to polish every detail; however this can be done very easy after
the release (I will make some patches)
- there is a big problem with XWiki.XWikiGroups Template, if there is no
object in it, it will not display a newly created group; currenlty
Sergiu and I put an empty XWiki.XWikiGroup object in the template but
there are problems with Thomas methods, who work fine in general, except
for this matter; so I really think we should revise this problem(right
now in Groups and Rights pages, the XWiki.XWikiGroupTemplate is also
displayed...I think maybe with something like obj.name <>
"XWiki.XWikiGroupsTemplate" in the hsql query will work....Thomas
already knows this problem; also there are a couple of things to
optimize in the queries)
- there are some improvements that can be done for the js code (right
now I use the lightbox that already existed and it does a refresh when
adding a new user/group; it is possible to eliminate this from the js
code if I modify the lightbox)
- I did not make the final test for a multiwiki environment but I have
done several tests and seemed to work without problems; I will test
though asap.
That's all about now.
Thanks,
Evelina
Evelyne wrote:
Hello all,
I am very sorry about the delay I caused to the release of XE 1.2.
The new Rights Management interface is almost ready. It includes the
following features:
1. Users management
2. Groups management
3. Rights management
The things that I already implemented:
1. For Users management:
- currently in xwiki all the users are displayed all at once in
Administration > Users & Groups as a long list of links to the users
profile pages; in order to provide a real-time management of the users
I used a table interface in which users are displayed dynamically (the
users objects are loaded with ajax, as the administrator scrolls down
in the table); the nice feature about this is that if the admin
scrolls down at the bottom of the table, only the last users
(alphabetically taken by the username) will be loaded and so on... the
number of users to display at once can be modified ( I am thinking to
add this option in Preferences, WDYT? )
- the table currently display 4 columns: username (link to that user
profile page) , first name, last name and a management column with 2
buttons (edit and delete)
- also, at the moment, i have implemented dynamic filters (filter as
you type) for username, last name, first name (separately or all) and
there is a select box with 3 options to dynamically display Local
users, Global users (from the main wiki in a multiwiki environement)
or Both (maybe this should also be a setting in the preferences? WDYT?)
- I am planning for the future to add a dynamic sorting algorithm to
the table (currently users are sorted by default from the api,
alphabetically, ascending for all the 3 columns) but this will demand
more time to develop
- right now i have implemented the deletion of a user (when the delete
button next to an user is pressed, the user's document will be deleted
with ajax)
- the edit button (currently half-implemented) will open an ajax
lightbox that will display the inline editing of that user's profile
and the save will also be done dynamically)
- also, i already made the script to add a new user (register and add
it in the table; the table will remain sorted and display the location
in it where the user was added) but i have to display a button that
will trigger the lightbox; the lightbox will contain the register form
for a new user;
- for the global users, the table will provide only a view, without
editing and delete buttons (because a global user cannot be deleted or
edited from a local wiki)
- also for the future (the velocity code already implemented) I am
thinking to add another button next to the user to automatically
display, in a nice tooltip, all the groups the user is member of (and
with a link to the each group - WDYT?)
2. For Groups management:
- the interface uses a user-like ajax table, with the difference that
for groups i display only the groupname (link), the number of members
in that group and the manage column;
- the edit button will also open the lightbox and allow to view all
the users in that group, paginated with javascript ( i wanted to use
the same ajax table to load all the users in the group but currently
the api does not allow that, so i have to take all the objects "
XWiki.XWikiGroups" and make a js pagination of the table);
- also, currently a group can contain XWiki.XWikiGroups objects, which
have only a field called Member - a user name ( or a usernames list? i
am using to add one member at the time); to add a subgroup in a group,
the only possible way right now is to add all the users in the
subgroup in the group, being careful not to duplicate the users; this
is possible because in the editing mode for a group, besides the table
that contains all the members of that group, each with a delete button
next to it, I have 2 inputs with ajax suggest: one used to add only
one user to the group and the other one used to add another group to
the current group -> this will be done, as I said, by adding all the
users from a group to another (I've spoken with Sergiu and Thomas and
I don't know another way to do that right now because there is no
difference in a XWiki.XWikiGroups object to tell which member is a
group and which is a user - maybe in the future WDYT?)
3. Rights management:
- the rights management interface is table-based as specified on the
Idea (
http://www.xwiki.org/xwiki/bin/view/Design/ImproveRightsManagement);
the administrator can select to see the rights for users or groups,
local or global or both.
- there is a column with the username/groupname and link to the
profile and the columns for rights: view, commend, edit, delete, admin
(only at global and space level), programming (global level, only main
wiki) , register (only global level).
- in the table there are displayed all the users or groups, taken with
ajax, and for each right there is a 3-state checkbox: by default, if
the user has no right set for the current level (document, space or
global entry) the checkboxes are empty; one click and the respective
right is allowed, 2 clicks and the right is deny (is circular);
- there are buttons to save, revert or clear all the rights (removes
all the rights entry for that user or group) - all dynamically, all
already implemented and working
- what i did not implemented yet is this part:
"Visual understanding of rights inheritance (rights from the upper
level replace or not at the current level); The interface should show
a column "greyed" if no rights are set for this column (it means
rights are inheritated). We should see the inheritated rights checked
(we need an API to find an inheritated right since it does not exist
now). At the global level we heritate rights from the default (always
authenticate in view, always authenticate in edit, admins are
heritated from global wiki in multiwiki mode or are not heritated)When
you ungrey the column then we can start from the heritated rights. If
you grey again the column no rights should be saved for this column."
I did not implement that because i don't know how to take the
inherited rights for a user/group. As for the interface part, this is
very simple, i can have a 4-state checkbox, with the greyed state
first, but I have to be able to take in velocity the inherited rights.
( I need help to understand how to do that )
- also I have not implemented yet the "optional admin panel can give
quick acces to admin actions (global rights, space rights, user
management, groups management"
, but i can use the same lightbox with some links for this matter or a
xwiki panel (WDYT?)
Currently, for the non-js users the old interface will be enabled.
Should I make the old interface reachable no matter if the user has or
no js activated? Like an option in the Preferences maybe? WDYT?
So, I would love to show you some screenshots or link but tonight I am
afraid it won't be possible. Reasons: I have transferred my work on
the laptop I will use at work because I needed to reinstall the system
on my personal laptop and I don't have the necessary software to run
the project yet (eclipse, maven). Tomorrow morning I will have a
server up and running. I also make a first patch tomorrow and put it
on Jira. By Monday I will implement the add button, the lightbox
display for registering a user and i will make the difference between
space admins and global admis (as Sergiu told me, is a matter of a
line or two in velocity code in the interface files and Thomas made
methods for that in the api); also if it is urgent, the panel with the
links to administration.
So, that's all right now. I made a mistake because I should have
written more often on the devs and ask for guidance but as I am a
begginer and also have a limited time to work, I still have to learn
to be part of a community. I am really sorry for the delay I caused.
It won't happen again :)
Thanks,
Evelina