2017-03-22 22:07:14 -04:00
|
|
|
<?php
|
|
|
|
|
|
|
|
namespace BusinessLogic\Security;
|
|
|
|
|
|
|
|
|
|
|
|
use BusinessLogic\Tickets\Ticket;
|
2017-03-25 16:36:47 -04:00
|
|
|
use DataAccess\Security\UserGateway;
|
2017-03-22 22:07:14 -04:00
|
|
|
|
|
|
|
class UserToTicketChecker {
|
2017-03-25 16:36:47 -04:00
|
|
|
/* @var $userGateway UserGateway */
|
|
|
|
private $userGateway;
|
|
|
|
|
|
|
|
function __construct($userGateway) {
|
|
|
|
$this->userGateway = $userGateway;
|
|
|
|
}
|
2017-03-22 22:07:14 -04:00
|
|
|
|
|
|
|
/**
|
|
|
|
* @param $user UserContext
|
|
|
|
* @param $ticket Ticket
|
|
|
|
* @param $isEditing bool true if editing a ticket, false if creating
|
|
|
|
* @param $heskSettings array
|
|
|
|
* @return bool
|
|
|
|
*/
|
|
|
|
function isTicketWritableToUser($user, $ticket, $isEditing, $heskSettings) {
|
|
|
|
$hasAccess = $user->admin === true ||
|
|
|
|
(in_array($ticket->categoryId, $user->categories) &&
|
|
|
|
in_array(UserPrivilege::CAN_VIEW_TICKETS, $user->permissions));
|
|
|
|
|
2017-03-25 16:36:47 -04:00
|
|
|
if ($isEditing) {
|
|
|
|
$categoryManagerId = $this->userGateway->getManagerForCategory($ticket->categoryId, $heskSettings);
|
|
|
|
|
|
|
|
$hasAccess = $hasAccess &&
|
2017-04-12 22:00:56 -04:00
|
|
|
($user->admin === true
|
|
|
|
|| in_array(UserPrivilege::CAN_EDIT_TICKETS, $user->permissions)
|
|
|
|
|| $categoryManagerId == $user->id);
|
2017-03-25 16:36:47 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
return $hasAccess;
|
2017-03-22 22:07:14 -04:00
|
|
|
}
|
|
|
|
}
|