ok Confluence Wiki: Velocity Usermacro für delegiertes Usermanagement | CMS - Webdesign - Website

Confluence Wiki: Velocity Usermacro für delegiertes Usermanagement

Dieser Beitrag zeigt, wie man in Confluence durch ein Usermacro das Anlegen von neuen Useraccounts an „Normaluser“ einer bestimmten Usergruppe delegieren kann:

In Confluence Wikis kann meist nur der Site Administrator User anlegen, sofern die Option für Self Signup unter Administration / Users / User Signup Options nicht aktiviert ist: „Allow people to sign up to create their account“. Die beste Option ist natürlich die externe Userverwaltung und Authentisierung über ein Directory. Aber dennoch müssen die User ja im Confluence System angelegt werden. Ist die Option für die Selbst-Registrierung aktiv, wird man häufig mit der Tatsache konfrontiert, das sich User mehrfach registrieren (z.B. weil sie ihr Passwort vergessen haben und die Funktion „Passwort vergessen“ nicht finden oder sich nicht mehr an ihren Usernamen oder die hinterlegte Emailadresse erinnern können). Auch Spaßvögel tauchen auf, die sich unerwünschte Usernamen zulegen oder eine unsichere Mailadresse verwenden.

In größeren Unternehmen mit vielen Mitarbeitern und Usern kann es für einen Administrator eine Erleichterung bedeuten, das Anlegen von User-Account an verschiedene verantwortungsvolle Keyuser zu delegieren, ohne deswegen gleich globale Admin-Rechte zu vergeben.

Dieses Usermacro (in Velocity Markup) ermöglicht das Anlegen von neuen Useraccounts durch „normale“ User. Einzige Voraussetzung: die User müssen hierfür in einer zu definierenden Usergroup sein. Hier im Macro hat diese Gruppe den Namen  „usercreator“. Man kann aber natürlich auch einen anderen Gruppennamen festlegen. Dieser muss dann im Macro Code entsprechend geändert werden.

Das Macro wird so gegen unauthorisierte Anwendung durch User geschützt. Diese sehen dann einen roten Hinweis dass sie nicht berechtigt sind, das Macro zu nutzen.

Usermacros kann nur ein globaler Site Administrator anlegen. Danach kann jeder User dieses Macro auf einer Seite einbinden und dann Useraccounts  anlegen, sofern er durch die definierte Usergruppe berechtigt ist.

## Macro title: create User Account
## Macro has a body: N
## Developed by: Stefan Baader
## Date created: 16/09/2013
## Installed by: Stefan Baader
## This is a macro usable only for the members of the group "usercreator".
## @no-params
#set($remoteuser = $action.remoteUser)
#set($group = $userAccessor.getGroup('usercreator') )
####### Macro Security: nur durch User mit canSetPermissions=TRUE ausführbar #############
#if( $userAccessor.hasMembership($group, $remoteuser)  )
$remoteuser.getFullName(), you are permitted to use this user macro<br/>
#set($username="")
#set($username=$req.getParameter("username"))
#set($usernameexists=$userAccessor.getUser($username).getName())
#set($password="")
#set($password=$req.getParameter("password"))
#set($email="")
#set($email=$req.getParameter("email"))
#set($fullname="")
#set($fullname=$req.getParameter("fullname"))
#set( $urlPrefix = "$req.getScheme()://$req.getServerName()$req.contextPath" )
<form method="get">
<strong>Create user account</strong>
<table border="0" style="border:none">
<tr>
<td><label for="username">Username</label></td>
<td><input type="text" id="username" name="username" value="$username" /></td>
</tr><tr>
<td><label for="password">Password</label>
<td><input type="password" id="password" name="password" value="$password" /></td>
</tr><tr>
<td><label for="email">E-Mail</label>
<td><input type="text" id="email" name="email" value="$email" /></td>
</tr><tr>
<td><label for="fullname">Full Name</label></td>
<td><input type="text" id="fullname" name="fullname" value="$fullname" /></td>
</tr><tr>
<td colspan="2"><input type="submit" name="submit" value="create user" /></td>
</tr>
</table>
</form>
#if($req.getParameter("submit") )
#if($username!="" && $password!="" )
#if($username!=$usernameexists)
## User anlegen:
$userAccessor.addUser($username,$password,$email,$fullname)
$userAccessoraddMembership("confluence-users",$username)
<div style="color:green">The user account was created </div>
<div style="color:green">The user account was added to group "confluence-users"</div>
<div><a href="mailto:$email?Subject=Your new user account in $urlPrefix/&Body=A user account for Wiki was created for you:%0D%0Ausername = $username%0D%0ASet a password: $urlPrefix/forgotuserpassword.action?usernameOrEmail=$email%0D%0AThe Wiki delegated administration  $remoteuser.getFullName() ">Create mail to new user</a></div>
#else  ###if($username!=$usernameexists)
<div style="color:red">username allready exists </div>
#end ###if($username!=$usernameexists)
#else ###if($username!="" )
<div style="color:red">No username or password defined</div>
#end
#end ###if($req.getParameter("submit") )
#else #### if canSetPermissions=FALSE  #####################################
### Hinweis wenn keine Macro Berechtigung
<div style="color:red">Sorry, $remoteuser.getFullName(). You are NOT permitted to use this user macro</div>
#end ################################################################

Die Nutzung des Macros erfolgt ohne Gewähr auf eigenes Risiko.

Entwickelt und getestet auf CONF 4.3.7