Creating Rights: AssignTicket, howto

rt-devel:

I just wanted to post a quick blurb about how to create a custom right
in RT, as I’ve seen some mention of this in the list archives without
explanation. The following is what I did. Its pretty simple.

  1. Add the right in the Queue_Overlay.pm file;
  2. Modify Ticket_Overlay.pm ( or other files ) to reflect the logic
    of the right;
  • see the diff files *

The new right will show up in the database once you assign it to some
groups or users. So far, I haven’t noticed any other libs or templates that
needed to be changed, but if I missed something, please let me know.

I think an AssignTicket right would be a great addition to future releases
of RT.

just me
tcp

mysql> select a.PrincipalType, a.RightName, g.Description from ACL a, Groups g where a.RightName = ‘AssignTicket’ and a.PrincipalID = g.id; ±--------------±-------------±-------------------------------------+
| PrincipalType | RightName | Description |
| Group | AssignTicket | Assigns Tickets to Queues and People |
| Owner | AssignTicket | SystemRolegroup for internal use |
2 rows in set (0.00 sec)

mysql>

Diffs against lib files from RT 3.0.5

Queue_Overlay.pm

90a91

AssignTicket    => 'Assign tickets',

Ticket_Overlay.pm

1914c1914,1915
< unless ( $self->CurrentUserHasRight(‘ModifyTicket’) ) {

unless (    $self->CurrentUserHasRight('ModifyTicket')  
         || $self->CurrentUserHasRight('AssignTicket') ) {

1948c1949,1950
< return ( $self->_Set( Field => ‘Queue’, Value => $NewQueueObj->Id() ) );

return ( $self->_Set( Field => 'Queue', Value => $NewQueueObj->Id(), CheckACL => 0 ) );
# Toby, disabled the CheckACL since we've done it already

3055c3057,3058
< || $self->CurrentUserHasRight(‘StealTicket’) ) {

             || $self->CurrentUserHasRight('StealTicket') 
             || $self->CurrentUserHasRight('AssignTicket') ) {

3060c3063,3064
< unless ( $self->CurrentUserHasRight(‘ModifyTicket’) ) {

    unless (    $self->CurrentUserHasRight('ModifyTicket') 
             || $self->CurrentUserHasRight('AssignTicket') ) {

3077,3079c3081,3084
< ( $self->OwnerObj->Id != $RT::Nobody->Id ) and #and the owner is set
< ( $self->CurrentUser->Id ne $self->OwnerObj->Id() )
< ) { #and it’s not us