<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=US-ASCII">
<META content="MSHTML 6.00.2800.1498" name=GENERATOR></HEAD>
<BODY id=role_body style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Arial" 
bottomMargin=7 leftMargin=7 topMargin=7 rightMargin=7><FONT id=role_document 
face=Arial color=#000000 size=2>
<DIV>We wanted the ability to create a new user and give them access to 
create/edit/disable users.&nbsp; I did not want to give this user SuperUser 
access, so I gave them the following rights:</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;AdminUsers</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;ShowConfigTab</DIV>
<DIV>&nbsp;</DIV>
<DIV>However, more menu options displayed than I wanted, plus I noticed that 
this user could change the password for *ANY* user, including root, which I 
didn't care for.</DIV>
<DIV>&nbsp;</DIV>
<DIV>So I put together this patch (consisting of 3 files) which will do the 
following:</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;If a user has ShowConfigTab, but does NOT have 
SuperUser rights, the only menu option that will be displayed will be User</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;When the user list of priviledged users comes up, 
users with SuperUser right will NOT be displayed.</DIV>
<DIV>&nbsp;</DIV>
<DIV>Just thought I'd share this with everyone in case others need this 
functionality.&nbsp; I looked around and had not seen anything like this posted 
already.&nbsp; Hopefully someone will find this handy.</DIV>
<DIV>&nbsp;</DIV>
<DIV>-----</DIV>
<DIV>&nbsp;</DIV>
<DIV>--- share/html/Admin/index.html&nbsp;Wed Jun&nbsp; 1 18:36:55 2005<BR>+++ 
local/html/Admin/index.html&nbsp;Tue Sep&nbsp; 6 17:32:34 2005<BR>@@ -55,45 
+55,53 @@<BR>&nbsp;&lt;/ul&gt;<BR>&nbsp;&lt;%init&gt;<BR>&nbsp;<BR>-<BR>-<BR>-my 
$tabs = {<BR>-&nbsp;&nbsp;&nbsp; A =&gt; 
{<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
title&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&gt; 
loc('Users'),<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
path&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&gt; 
'Admin/Users/index.html',<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
description =&gt; loc('Manage users and passwords'),<BR>-&nbsp;&nbsp;&nbsp; 
},<BR>-&nbsp;&nbsp;&nbsp; B =&gt; 
{<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; title =&gt; 
loc('Groups'),<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; path&nbsp; =&gt; 
'Admin/Groups/index.html',<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
description =&gt; loc('Manage groups and group 
membership'),<BR>-&nbsp;&nbsp;&nbsp; },<BR>-&nbsp;&nbsp;&nbsp; C =&gt; 
{<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
title&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&gt; 
loc('Queues'),<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
path&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&gt; 
'Admin/Queues/index.html',<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
description =&gt; loc('Manage queues and queue-specific 
properties'),<BR>-&nbsp;&nbsp;&nbsp; },<BR>-&nbsp;&nbsp;&nbsp; D =&gt; 
{<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'title'&nbsp;&nbsp;&nbsp;&nbsp; 
=&gt; loc('Custom Fields'),<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
description =&gt; loc('Manage custom fields and custom field 
values'),<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
path&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&gt; 
'Admin/CustomFields/index.html',<BR>-&nbsp;&nbsp;&nbsp; 
},<BR>-&nbsp;&nbsp;&nbsp; E =&gt; 
{<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'title'&nbsp;&nbsp;&nbsp;&nbsp; 
=&gt; loc('Global'),<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
path&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&gt; 
'Admin/Global/index.html',<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
description =&gt;<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
loc('Manage properties and configuration which apply to all 
queues'),<BR>-&nbsp;&nbsp;&nbsp; },<BR>-&nbsp;&nbsp;&nbsp; F =&gt; 
{<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'title'&nbsp;&nbsp;&nbsp;&nbsp; 
=&gt; loc('Tools'),<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
path&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&gt; 
'Admin/Tools/index.html',<BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
description =&gt; loc('Use other RT administrative 
tools')<BR>-&nbsp;&nbsp;&nbsp; },<BR>-};<BR>+my ($tabs, $superuser, 
$amisuperuser);<BR>+$superuser=new 
RT::User($session{'CurrentUser'});<BR>+$amisuperuser=$superuser-&gt;CurrentUserHasRight('SuperUser');<BR>+<BR>+if 
($amisuperuser) {<BR>+&nbsp;&nbsp;&nbsp; $tabs = 
{<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A =&gt; 
{<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
title&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&gt; 
loc('Users'),<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
path&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&gt; 
'Admin/Users/index.html',<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
description =&gt; loc('Manage users and 
passwords'),<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
},<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; B =&gt; 
{<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; title 
=&gt; 
loc('Groups'),<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
path&nbsp; =&gt; 
'Admin/Groups/index.html',<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
description =&gt; loc('Manage groups and group 
membership'),<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
},<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C =&gt; 
{<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
title&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&gt; 
loc('Queues'),<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
path&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&gt; 
'Admin/Queues/index.html',<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
description =&gt; loc('Manage queues and queue-specific 
properties'),<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
},<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; D =&gt; 
{<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
'title'&nbsp;&nbsp;&nbsp;&nbsp; =&gt; loc('Custom 
Fields'),<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
description =&gt; loc('Manage custom fields and custom field 
values'),<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
path&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&gt; 
'Admin/CustomFields/index.html',<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
},<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; E =&gt; 
{<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
'title'&nbsp;&nbsp;&nbsp;&nbsp; =&gt; 
loc('Global'),<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
path&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&gt; 
'Admin/Global/index.html',<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
description =&gt; loc('Manage properties and configuration which apply to all 
queues'),<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
},<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; F =&gt; 
{<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
'title'&nbsp;&nbsp;&nbsp;&nbsp; =&gt; 
loc('Tools'),<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
path&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&gt; 
'Admin/Tools/index.html',<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
description =&gt; loc('Use other RT administrative 
tools')<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; },<BR>+&nbsp;&nbsp;&nbsp; 
}<BR>+} else {<BR>+&nbsp;&nbsp;&nbsp; $tabs = 
{<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A =&gt; 
{<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
title&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&gt; 
loc('Users'),<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
path&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&gt; 
'Admin/Users/index.html',<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
description =&gt; loc('Manage users and 
passwords'),<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
},<BR>+&nbsp;&nbsp;&nbsp; }<BR>+}<BR>&nbsp;<BR>&nbsp;&nbsp; 
$m-&gt;comp('/Elements/Callback', tabs =&gt; $tabs, 
%ARGS);<BR>&nbsp;<BR>-<BR>-<BR>-<BR>&nbsp;&lt;/%init&gt;<BR></DIV>
<DIV>--- share/html/Admin/Users/index.html&nbsp;Sun Apr 17 21:43:44 2005<BR>+++ 
local/html/Admin/Users/index.html&nbsp;Tue Sep&nbsp; 6 17:25:13 2005<BR>@@ -56,8 
+56,10 @@<BR>&nbsp;% }<BR>&nbsp;%my @ids;<BR>&nbsp;%while ( $user = 
$users-&gt;Next) {<BR>-%&nbsp;&nbsp;&nbsp; push @ids, 
$user-&gt;Id;<BR>+%&nbsp;&nbsp;&nbsp; if 
(($amisuperuser)||((!$amisuperuser)&amp;&amp;(!$user-&gt;HasRight(Object=&gt;$RT::System,Right=&gt;'SuperUser')))) 
{<BR>+%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; push @ids, 
$user-&gt;Id;<BR>&nbsp;&lt;LI&gt;&lt;A 
HREF="Modify.html?id=&lt;%$user-&gt;id%&gt;"&gt;&lt;%$user-&gt;Name || loc('(no 
name listed)')%&gt;&lt;/a&gt;&lt;/LI&gt;<BR>+%&nbsp;&nbsp;&nbsp; 
}<BR>&nbsp;%}<BR>&nbsp;&lt;/UL&gt;<BR>&nbsp;%if (my $ids = join(',', @ids)) 
{<BR>@@ -74,7 +76,7 
@@<BR>&nbsp;&lt;/FORM&gt;<BR>&nbsp;<BR>&nbsp;&lt;%INIT&gt;<BR>-my ($user, 
$caption);<BR>+my ($user, $caption, $superuser, $amisuperuser);<BR>&nbsp;my 
$users = new RT::Users($session{'CurrentUser'});<BR>&nbsp;<BR>&nbsp;if 
($FindDisabledUsers) {<BR>@@ -102,6 +104,8 @@<BR>&nbsp;&nbsp;&nbsp;&nbsp; 
$caption = loc("Privileged users");<BR>&nbsp;&nbsp;&nbsp;&nbsp; 
$users-&gt;LimitToPrivileged;<BR>&nbsp;}<BR>+$superuser=new 
RT::User($session{'CurrentUser'});<BR>+$amisuperuser=$superuser-&gt;CurrentUserHasRight('SuperUser');<BR>&nbsp;&lt;/%INIT&gt;<BR>&nbsp;&lt;%ARGS&gt;<BR>&nbsp;$UserString 
=&gt; undef<BR></DIV>
<DIV>--- share/html/Admin/Elements/Tabs&nbsp;Tue Feb&nbsp; 1 09:20:40 
2005<BR>+++ local/html/Admin/Elements/Tabs&nbsp;Tue Sep&nbsp; 6 17:37:05 
2005<BR>@@ -50,7 +50,12 @@<BR>&nbsp;&nbsp;&nbsp;&nbsp; Title =&gt; $Title 
&amp;&gt;<BR>&nbsp;<BR>&nbsp;&lt;%INIT&gt;<BR>-&nbsp; my $tabs = { A =&gt; { 
title =&gt; loc('Users'),<BR>+my ($tabs, $superuser, 
$amisuperuser);<BR>+$superuser=new 
RT::User($session{'CurrentUser'});<BR>+$amisuperuser=$superuser-&gt;CurrentUserHasRight('SuperUser');<BR>+<BR>+if 
($amisuperuser) {<BR>+&nbsp; $tabs = { A =&gt; { title =&gt; 
loc('Users'),<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; path =&gt; 
'Admin/Users/',<BR>&nbsp;&nbsp;&nbsp;&nbsp;},<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
B =&gt; { title =&gt; loc('Groups'),<BR>@@ -69,6 +74,12 
@@<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; path =&gt; 
'Admin/Tools/',<BR>&nbsp;&nbsp;&nbsp;&nbsp; 
},<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; };<BR>+} else {<BR>+&nbsp; $tabs = { 
A =&gt; { title =&gt; loc('Users'),<BR>+&nbsp;&nbsp;&nbsp;&nbsp; path =&gt; 
'Admin/Users/',<BR>+&nbsp;&nbsp;&nbsp;},<BR>+&nbsp; 
};<BR>+}<BR>&nbsp;<BR>&nbsp;&nbsp; # Now let callbacks add their extra 
tabs<BR>&nbsp;&nbsp; $m-&gt;comp('/Elements/Callback', tabs =&gt; $tabs, 
%ARGS);<BR></DIV></FONT></BODY></HTML>