[Rt-devel] adding non-priviledged users to groups

Nicholas Clark nick at ccl4.org
Thu May 17 04:58:48 EDT 2007


On Wed, May 16, 2007 at 01:01:48PM -0400, Jesse Vincent wrote:

> Getting there. A nuance of mason:  It's one namespace for all mason  
> pages. So sub definitions are...not what you want. An anon sub is  
> better.

Ah. I did it with a foreach instead. It seemed less clunky that creating then
calling an anonymous sub.

> I'd also put the label on the optgroup inside  <%loc("")%> so that it  
> gets localized.

Is that the same as <&|/l&> ?

If so, the appended should do it.

Nicholas Clark

--- html/Admin/Elements/SelectNewGroupMembers~	Mon Jun 19 22:44:04 2006
+++ html/Admin/Elements/SelectNewGroupMembers	Thu May 17 08:47:18 2007
@@ -46,7 +46,13 @@
 % if ($Show ne 'Groups') {
 <b><&|/l&>Users</&></b>
 <select multiple name="<%$Name%>Users"  size="10">
-%while (my $user = $users->Next) {
+<optgroup label="<&|/l&>Privileged users</&>">
+%while (my $user = $p_users->Next) {
+%next if $SkipUsers->{$user->id};
+<option value="User-<%$user->id%>"><%$user->Name%></option>
+%}
+<optgroup label="<&|/l&>Unprivileged users</&>">
+%while (my $user = $u_users->Next) {
 %next if $SkipUsers->{$user->id};
 <option value="User-<%$user->id%>"><%$user->Name%></option>
 %}
@@ -64,21 +70,30 @@
 % }
 
 <%INIT>
-my $users = new RT::Users($session{'CurrentUser'});
 
-$users->Limit(
+# It's one namespace for all mason pages, so the "logical" way of doing this,
+# a subroutine definition, is not the best way. Hence the foreach to initialize
+
+my ($p_users, $u_users);
+foreach my $users ($p_users, $u_users) {
+  $users = new RT::Users($session{'CurrentUser'});
+
+  $users->Limit(
     FIELD           => 'id',
     VALUE           => $RT::SystemUser->id,
     OPERATOR        => '!=',
     ENTRYAGGREGATOR => 'AND'
-);
-$users->Limit(
+  );
+  $users->Limit(
     FIELD           => 'id',
     VALUE           => $RT::Nobody->id,
     OPERATOR        => '!=',
     ENTRYAGGREGATOR => 'AND'
-);
-$users->LimitToPrivileged();
+  );
+}
+
+$p_users->LimitToPrivileged();
+$u_users->LimitToUnprivileged();
 
 my $groups = new RT::Groups($session{'CurrentUser'});
 
--- lib/RT/Users_Overlay.pm~	Tue Sep 26 15:06:31 2006
+++ lib/RT/Users_Overlay.pm	Thu May 17 08:54:06 2007
@@ -226,6 +226,27 @@
 
 # }}}
 
+# {{{ LimitToUnprivileged
+
+=head2 LimitToUnprivileged
+
+Limits to users who can not be made members of ACLs and groups
+
+=cut
+
+sub LimitToUnprivileged {
+    my $self = shift;
+
+    my $priv = RT::Group->new( $self->CurrentUser );
+    $priv->LoadSystemInternalGroup('Unprivileged');
+    unless ( $priv->Id ) {
+        $RT::Logger->crit("Couldn't find a unprivileged users group");
+    }
+    $self->MemberOfGroup( $priv->PrincipalId );
+}
+
+# }}}
+
 # {{{ WhoHaveRight
 
 =head2 WhoHaveRight { Right => 'name', Object => $rt_object , IncludeSuperusers => undef, IncludeSubgroupMembers => undef, IncludeSystemRights => undef, EquivObjects => [ ] }


More information about the Rt-devel mailing list