[rt-devel] RT2 ACLs

Arthur de Jong arthur at West.NL
Wed Apr 4 07:45:09 EDT 2001


Since we (for the company I work for) need the correct implementation of ACLs 
in RT2 I spent some time to find out what the different rights in RT2 are, 
what they do and what they should do. The only two things that currently keep 
us back from switching to RT2 are the migration tool and the ACLs.


Current ACLs  (could be used as part of documentation)
------------

Rights can be granted to users and groups to define what the user is allowed
to do and change in RT. Rights can apply to the whole of RT and all the
queues (global) or can apply to a single specific queue. Rights can be
granted to individual users and to defined groups of users.

Rights can also be assigned to pseudogroups that define users in a context.
The pseudogroups are "Everyone" (all the users on the system), "Requestor"
(users that are requestor in the context of the current ticket), "Cc" (users
that are Cc , either direct by the ticket or defined in the queue, of the
selected ticket) and "AdminCc" (users that are Administrative Cc to the
ticket).

The effective rights of a user are the combination of the global personal
right, the combined global rights of the groups the user is in, the rights of
the user and all the groups that the user is in to the currently selected
queue and the rights the user gets through the pseudogroups.

A description of all the rights that users and groups can be assigned in RT
follows:


AdminGroups (global only)

  Users with this right are allowed to create new groups, modify the name and
  description of the group and add and remove registered users to and from
  the group.

  1-3-68: This seems to be implemented. A user without the AdminGroups right
          does however have the right to view all the groups on the system
          including who are members of the group.


AdminKeywordSelects (global and queue)

  Users with the AdminKeywordSelects should be able to add, delete and modify
  keyword selections for a specific queue (or all queues if this right is set
  globally).

  1-3-68: Trying this as u user without AdminKeywordSelects causes a System
          error. All users have the right to browse the keywords (not a
          problem).


AdminKeywords (global only)

  Users with the AdminKeywords rights can add, modify and delete keywords.
  Keywords are global to RT.

  1-3-68: Users without this right cannot change keywords (but receive not
          error). Users can browser all keywords.


AdminQueue (global and queue)

  Users with the AdminQueue right can change (all???) the queue settings. If
  the setting is global it applies to all the queues. These settings include
  basic settings like name, description, email addresses and priorities.

  1-3-68: seems to work


AdminUsers (global only)

  Users with this right are allowed to add and modify users.

  1-3-68: Users without the right to do so are presented with a "create a new
          user" link. All users are allowed to browse all the registered
          users. Non-privileged users cannot be listed.


CommentOnTicket (global and queue)

  Users with the CommentOnTicket right are allowed to add comments to
  tickets. When this right is global a user can add comments to all the
  tickets in RT otherwise the user is only allowed to comment on tickets in
  the specified queue.

  1-3-68: any user can add comments to a ticket (not implemented)


CreateTicket (global and queue)

  Users with the CreateTicket right can create requests in the specified
  queue or in all the queues if global is selected.

  1-3-68: working in all the right places I could find


DeleteTicket (global and queue)

  A user with the DeleteTicket is allowed to set the status to "dead"????

  1-3-68: not implemented, is this used? The status selector of a ticket
          shows dead (Modify.html) even if the user does not have the
          DeleteTicket right.


ModifyACL (global and queue)

  If a user has the ModifyACL right he/she can change the rights different
  users and groups can be assigned regarding queues. If the ModifyACL right
  was granted globally the user can change all the ACLs in RT, including the
  global ones (including granting him/herself SuperUser privileges).
  ModifyACL does strange things without ShowACL.

  1-3-68: When you try to remove a single given from a single group right and
          the user is not privileged to do so a number of error messages is
          generated (equal to the number of registered groups) (potential
          bug?).


ModifyQueueWatchers (global and queue)

  This rights enables a user to register and remove other users as watchers
  (cc and admin.cc) to a queue. If this right is assigned globally the user
  can modify watcher settings of all the queues.

  1-3-68: This does not seem to be implemented as any user is allowed to
          change the watchers to a queue.


ModifyScrips (global and queue)

  This right allows a user to add and delete scrips from a queue of, if the
  right is granted globally, change the global default scrips.

  1-3-68: Wrong without ShowTemplate. Deleting a scrip by an user without the
          ModifyScrips right results in a "Scrip deleted" message without
          deleting the scrip.


ModifySelf (global only)

 This allows the user to change his/her personal settings.

 1-3-68: The user is allowed to change his/her unix login username and
         enable/disable privileged user setting. When displaying a user and
         changing the privilege status the status does not change in the user
         settings but does change in the page (strange). Should this right be
         granted to everyone and should this affect the Preferences page.


ModifyTemplate (global and queue)

  The user is allowed to modify the templates. If this right is granted
  globally the user may modify the global templates and the templates for all
  the queues.


ModifyTicket (global and queue)

  The user is allowed to modify the ticket. Modifying the ticket includes
  changing the subject, status (except dead???), time worked, time left,
  priorities, queue the ticket is in (only queues the user has rights
  to????), ticket dates, keyword values, owner (to users that are allowed to
  own the ticket?), requestor and watchers and relationships with other
  tickets.


OwnTicket (global and queue)

  Only users that have the OwnTicket right can be owners of a ticket. This
  right can be granted globally or per queue.


ReplyToTicket (global and queue)

  User with a ReplyToTicket right can add replies to a ticket.

  1-3-68: The selector in the comment ticket page (and jumbo) does not
          reflect the granted permissions. There are links to comment (and
          others) even if the user does not have the right to do these.

SeeQueue (global and queue)

  This allows users to see what tickets are in the specified queue and to
  search the tickets in the queue. If this right is granted globally the user
  is allowed to search and display all the queues.

  1-3-68: All users are allowed to see what queues there are through the
          Administration->Queues link. With the search link any queue can be
          searched.

ShowACL (global and queue)

  This allows the user to view the currently active ACLs (rights granted to
  users and groups). When this rights is applies globally the user is allowed
  to view the ACLs of all the 

  1-3-68: All the users seem to be able to view all the queue ACLs.


ShowScrips (global and queue)

  Users with this right are allowed to view the scrips.

  1-3-68: Global scrips are not shown but a checkbox is displayed.


ShowTemplate (global and queue)

  Users with this right are allowed to view the mail templates.


ShowTicket (global and queue)

  Users with this right are allowed to display the ticket.


ShowTicketComments (global and queue)

  Users are allowed to view the comments entered with tickets.


SuperUser (global only)

  A SuperUser is allowed to do anything.


Watch (global and queue)

  A user is allowed to be registered as watcher?


WatchAsAdminCc (global and queue)

  A user is allowed to be registered as administrative watcher?


CONCLUSION
----------

RT2 has a lot of different rights that can be granted to users what makes it
very flexible but also may makes RT difficult to manage. The currently
available rights and permissions are not ideal.

I suggest trying to loose sine of these rights to simplify the implementation
and maintainability.  Another thing would be to increase consistency in
naming to use Admin* rights for administrative tasks and Modify* rights for
general operational tasks. Maybe something like:

AdminGroups (only global)
AdminKeywords (only global)
AdminUsers (only global)
AdminQueue (with AdminKeywordSelects, basics, watchers, scrips, templates and
            keyword selections)
AdminQueueACLs (was ModifyACL, applies to user and group ACLs in queues,
                implies ShowACL)
ModifySelf (should only apply to passwd, signature and maybe a few other
            things)

If AdminQueue and AdminQueueACLs are applied globally they would apply to all
the queues and the default settings. Alternatively AdminQueue could be split
in AdminQueueBasics, AdminQueueWatchers, AdminQueueScrips,
AdminQueueTemplates and AdminQueueKeywordSelects.

This would imply getting rid of AdminKeywordSelects (would be in AdminQueue),
ShowACL (no practical need, in AdminACL), SuperUser (can be easily combined
from all other rights) ModifyQueueWatchers (in AdminQueue) ModifyScrips (in
AdminQueue), ShowScrips (in AdminQueue), ShowTemplate (in AdminQueue),
ModifyTemplate (in AdminQueue).

This way user with any Admin* rights would have access to the administration
part of RT and others would not. The other rights:

SeeQueue (see the tickets in the queue, ShowQueue?)
CreateTicket (allow to create ticket in queue)
ShowTicket (view the ticket basics, replies and status)
ShowTicketComments (also show comments in ticket)
CommentOnTicket (allow adding comments)
ReplyToTicket (allow sending replies)
ModifyTicket (allow changing basics, keywords, relationships, dates and
              watchers was ModifyTicket)
OwnTicket (allow to be owner of ticket)
Watch (allow to be added as watcher)
WatchAsAdminCc (allow to be added as adminwatcher)

The user interface should better reflect the rights of the authenticated
user. The user should only be presented with the means to change information
is the user is allowed to do so.

It might be a good idea to have a page to view all the rights a user has,
including how he got them (by groups etc). This is not easy and context
dependant since some rights can be granted through the pseudogroups (cc,
owner, admin cc).

Sorry if this long story is somewhat incoherent but that's this is the result
for the amount of time I can spend on it. We really need better ACLs.

-- arthur de jong - arthur at west.nl - west consulting b.v. --





More information about the Rt-devel mailing list