Personal Pages

Last modified by Vincent Massol on 2024/02/26 17:53

 XWiki
 Design
 Idea
 

Description

Even though the concept is not very wiki-oriented, several users have been asking over the years to have the ability to have personal pages (a.k.a private pages or user space), visible to the currently logged user only (by default), acting as a kind of personal sandbox.

Requirements

  • UC1: Available by default when creating a new user profile
  • UC2: Only the current logged in user should have permissions to see these pages by default
  • UC3: These pages should be moveable to public locations by using the standard move refactoring operation
  • UC4: Ability to provide such pages for existing user profiles (possibly through a script to execute or some migrator)
  • UC5: Ability for users to navigate easily to their personal pages

Related topics

  • Notes application (but not personal)
  • Publication workflow (but not personal)

Analysis

Proposal 1

  • Make the use profile page a non-terminal page by default (i.e. a space) so that other nested pages can be added.
  • Set permission in that space so that only the current user can view/edit the nested pages
  • For UC5 we could imagine letting the navigation panel display the current user and the nested pages in the hierarchy?

Problems:

  • What will break in XWiki and extensions if we change the user profile page from `XWiki.XXX` to `XWiki.XXX.WebHome`?
    • Answer: too many things. Example: the user looses his permissions, you cannot currently log in with a user located in a non terminal page, the {{useravatar}} macro will stop working, etc.

Conclusion:

  • Currently not possible

Proposal 2

  • Decide on the layout we want for apps/users/groups/etc and created a user space in that location for users when creating their user profile page
  • FTM keep the user profile page at the current location (we would need to find out how to migrate that in the future)
  • Set permission in that user space so that only the current user can view/edit the nested pages
  • For UC5 we could imagine adding a new user profile tab and when clicking on it, navigate to the user space home page which would have some default content to explain what to put there, maybe with a LD listing all children pages?

Problems:

  • Not easy to decide on the layout we want (but would be useful)
  • Requires a future migration for users

Proposal 3

  • Implement this as a "Private Notes Application" contrib extension
  • Provide a "Private Notes" space (for example) with a minimal UI that defines a LD listing all private notes for the current user
  • Register this "Private notes" app in the Application Panel
  • Provide a dedicated UI to create a new private note (a la FAQ app)
    • Ideally we would provide a "Private Notes" template to let users create private notes but we can't force creation of these pages inside a user-named space.
    • If the user-named space doesn't exist, create it and set the permission on it so that only the current user can access it
      • It's important to set the permission on the space and not the pages so that they can be later moved to public locations without having to force the user to manually change their permissions (see UC3)

This seems the simplest and safest option. It's not as deeply integrated in XS but it's possibly better since that makes it optional.

Proposal 4

Suggested by Edy.

  • Add a section on the create page UI to initialize the rights on the newly created page (perhaps similarly and consistent to what we do in the wiki creation page UI). Possible options:
    • Visible to:
      • Default (inherit from parent page rights)
      • Only me
      • Only users: <list of users>
      • Only groups: <list of groups>
      • Anyone from this wiki
      • Anyone from wikis: <list of wikis>
  • This would not create a "dedicated space" for user pages, since that’s not very consistent with the "wiki way". 
  • Additionally, we can always have a user profile section that lists all wiki pages (created by the current user or not) which are private and have the current user as (not necessarily the only) viewer. We could call that “My private pages”, or something like that.

 

Get Connected