Posted by Helmut_pdorf on 12 Dec 2010 15:57, last edited by RobElliott on 11 Sep 2011 09:46
Tags: howto specific_user_only suo
Notice: this is in most sequences a copy of the used snippets code Specific Users Only Include (SUO) implemented by James Kanjo. |
Description
A common request amongst Wikidot users is the ability to show or hide data based on the person who is viewing your wiki. For example, if a wiki administrator is viewing the wiki, then s/he should be able to see options such as “Manage Site”, “Edit Side Bar” and “Change CSS”. Perhaps you have decided that particular members of a wiki should not see certain options in the sidebar, such as welcome links for new visitors on a site.
The Specific Users Only Include ( SUO) makes this easy.
Syntax
attribute | required | allowed values | default | description |
---|---|---|---|---|
unique | no | alphanumeric characters, hyphens and underscores | universal | For the use of multiple SUO Includes on a single page (each one will need a unique identifier) |
type | yes | showto or hidefrom | none (it must be manually entered) | This specifies the type of SUO Include you wish to use. You can show data to the specified users, or you can hide data from specific users. |
user | no | A Wikidot user's UNIX name | none | This means lowercase letters, with spaces separated by hyphens. You can find this by clicking on a user's avatar, and taking note of their “profile page” link. |
user0 | … | … | … | Same as above, but for when applying SUO data to multiple users |
user1 | … | … | … | … |
… | … | … | … | … |
user99 | … | … | … | Currently supports up to 101 users |
mode | no | default or advanced | default | For using advanced variables, such as %%created_by%%, as a user |
The syntax is to use the SUO include with its attributes, followed by your Wikidot code on a new line, then by the SUO include again (but with NO attributes).
Code
[[include :snippets:suo BEGIN CODE |unique=first |type=showto |user1=james-kanjo |user2=michal-frackowiak]]
**Hello James Kanjo & Michał Frąckowiak!!!**
[[include :snippets:suo END CODE]]
[[include :snippets:suo BEGIN CODE |unique=second |type=hidefrom |user1=james-kanjo |user2=michal-frackowiak]]
**Hello Everybody Else!!!**
[[include :snippets:suo END CODE]]
In action
Important
Because the framework of this include is based upon the ListUsers Module, certain limitations apply:
- The use of Modules inside the SUO code is prohibited
- Anonymous Users will see nothing, because the ListUsers Module doesn't display data to anonymous users
- When in “Advanced Mode”, as the advanced mode utilises the ListPages Module, it cannot be nested inside the ListPages module (and cannot be included by a ListPages module)
In terms of having a NewPage module as part of your SUO code, a working alternative is the code:newpage in “Manual Mode”.
Notice: The usage of live - "_template"s to hold such SUO codes for a complete category is not working - the "%%content%%" variable is not replace by the content anyway!
Important 2
This technique used and generated by the SUO code does NOT MAKE THE TEXT SECURE! If you click with right mouse and select "show source" - than you will see the resulting "div" sections WITH the tet not show to other users:
(in my case with MY "User-id" - if you have a look on the source text of the html-rendered output you will see here YOUR userid).
<div class="first showto_helmuti-pdorf" style="display: none;"> <p><strong>Hello James Kanjo & Michał Frąckowiak!!!</strong></p> </div> <div class="second hidefrom_helmuti-pdorf" style="null"> <p><strong>Hello Everybody Else!!!</strong></p> </div>
Notice: the created class "first showto_….." joined with the actual Userid and with the used style="display: none;"
( otherway round - the class "second hidefrom_…." style="null" makes this viewable..)
Usage
Imagine you try to create for a class different "private" pages for every student ( and of course the admin-teacher) - this can not be done with "private" categories, but with the usage of the "Listuser-Module" and the iftags
1. You need only at the start of such a page a little "include" of the "BEGIN Code" of such SUO - defining the users who are allowed to see the rendered content ( or not).
2. At the end of the "private content" there have to be the END-code to end the starting conditions.
3. You need to disallow the page edit options for the sued category - because any other reader can see the source code if s/(he is allowed to do so.
4. You need to insert the eliminated "page options buttons" as stand alone buttons inside the viewable content - to give the allowed persons the ability to edit (and view) the source code.