@Override
 protected boolean isAccessAllowed(Ticket ticket) {
   UserDetails currentUser = this.getCurrentUser();
   boolean allowed = false;
   int status = ticket.getStatus();
   if (this.getAuthorizationManager()
           .isAuthOnPermission(currentUser, JpWttSystemConstants.WTT_ADMIN_PERMISSION)
       || (Ticket.STATES_ASSIGNABLE == status && this.userHasRole(ticket.getWttRole()))
       || Ticket.STATES_ASSIGNED == status
           && currentUser.getUsername().equals(ticket.getWttOperator())) {
     allowed = true;
   }
   return allowed;
 }
 public boolean isOperationAllowed(Ticket ticket, int operationCode) {
   boolean allowed = false;
   int status = ticket.getStatus();
   String operator = ticket.getWttOperator();
   UserDetails currentUser = this.getCurrentUser();
   boolean isAdmin =
       this.getAuthorizationManager()
           .isAuthOnPermission(currentUser, JpWttSystemConstants.WTT_ADMIN_PERMISSION);
   switch (operationCode) {
     case TicketOperation.OPERATIONS_SETASSIGNABLE:
       if (isAdmin && (Ticket.STATES_OPENED == status || Ticket.STATES_WORKING == status)) {
         allowed = true;
       }
       break;
     case TicketOperation.OPERATIONS_TAKEINCHARGE:
       if ((isAdmin && (Ticket.STATES_OPENED == status || Ticket.STATES_WORKING == status))
           || (Ticket.STATES_ASSIGNABLE == status && this.userHasRole(ticket.getWttRole()))) {
         allowed = true;
       }
       break;
     case TicketOperation.OPERATIONS_ANSWER:
     case TicketOperation.OPERATIONS_UPDATE:
     case TicketOperation.OPERATIONS_CLOSE:
       if (Ticket.STATES_ASSIGNED == status && currentUser.getUsername().equals(operator)) {
         allowed = true;
       }
       break;
     case TicketOperation.OPERATIONS_RELEASE:
       if ((isAdmin && (Ticket.STATES_ASSIGNABLE == status || Ticket.STATES_ASSIGNED == status))
           || (Ticket.STATES_ASSIGNED == status && currentUser.getUsername().equals(operator))) {
         allowed = true;
       }
       break;
   }
   return allowed;
 }