2020-06-21 21:31:30 +02:00
|
|
|
<?php
|
|
|
|
|
|
|
|
namespace App\Controller;
|
|
|
|
|
|
|
|
use App\Controller\AppController;
|
|
|
|
use Cake\Utility\Hash;
|
|
|
|
use Cake\Utility\Text;
|
|
|
|
use \Cake\Database\Expression\QueryExpression;
|
|
|
|
use Cake\Http\Exception\NotFoundException;
|
|
|
|
use Cake\Http\Exception\MethodNotAllowedException;
|
|
|
|
use Cake\Http\Exception\ForbiddenException;
|
|
|
|
use Cake\Http\Exception\NotAcceptableException;
|
|
|
|
use Cake\Error\Debugger;
|
|
|
|
|
|
|
|
class AuthKeysController extends AppController
|
|
|
|
{
|
2021-09-10 11:55:54 +02:00
|
|
|
public $filterFields = ['Users.username', 'authkey', 'comment', 'Users.id'];
|
|
|
|
public $quickFilterFields = ['authkey', ['comment' => true]];
|
2021-11-24 01:32:05 +01:00
|
|
|
public $containFields = ['Users' => ['fields' => ['id', 'username']]];
|
2021-09-10 11:55:54 +02:00
|
|
|
|
2020-06-21 21:31:30 +02:00
|
|
|
public function index()
|
|
|
|
{
|
2021-11-24 01:32:05 +01:00
|
|
|
$currentUser = $this->ACL->getUser();
|
|
|
|
$conditions = [];
|
|
|
|
if (empty($currentUser['role']['perm_admin'])) {
|
|
|
|
$conditions['Users.organisation_id'] = $currentUser['organisation_id'];
|
|
|
|
if (empty($currentUser['role']['perm_org_admin'])) {
|
|
|
|
$conditions['Users.id'] = $currentUser['id'];
|
|
|
|
}
|
|
|
|
}
|
2020-06-21 21:31:30 +02:00
|
|
|
$this->CRUD->index([
|
2021-09-10 11:55:54 +02:00
|
|
|
'filters' => $this->filterFields,
|
|
|
|
'quickFilters' => $this->quickFilterFields,
|
|
|
|
'contain' => $this->containFields,
|
2021-11-24 01:32:05 +01:00
|
|
|
'exclude_fields' => ['authkey'],
|
|
|
|
'conditions' => $conditions,
|
|
|
|
'hidden' => []
|
2020-06-21 21:31:30 +02:00
|
|
|
]);
|
2021-01-11 16:28:07 +01:00
|
|
|
$responsePayload = $this->CRUD->getResponsePayload();
|
|
|
|
if (!empty($responsePayload)) {
|
|
|
|
return $responsePayload;
|
2020-06-21 21:31:30 +02:00
|
|
|
}
|
2020-08-07 21:47:04 +02:00
|
|
|
$this->set('metaGroup', $this->isAdmin ? 'Administration' : 'Cerebrate');
|
2020-06-21 21:31:30 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
public function delete($id)
|
|
|
|
{
|
2021-11-24 01:32:05 +01:00
|
|
|
$currentUser = $this->ACL->getUser();
|
|
|
|
$conditions = [];
|
|
|
|
if (empty($currentUser['role']['perm_admin'])) {
|
|
|
|
$conditions['Users.organisation_id'] = $currentUser['organisation_id'];
|
|
|
|
if (empty($currentUser['role']['perm_org_admin'])) {
|
|
|
|
$conditions['Users.id'] = $currentUser['id'];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
$this->CRUD->delete($id, ['conditions' => $conditions, 'contain' => 'Users']);
|
2021-01-11 16:28:07 +01:00
|
|
|
$responsePayload = $this->CRUD->getResponsePayload();
|
|
|
|
if (!empty($responsePayload)) {
|
|
|
|
return $responsePayload;
|
2020-06-21 21:31:30 +02:00
|
|
|
}
|
2020-08-07 21:47:04 +02:00
|
|
|
$this->set('metaGroup', $this->isAdmin ? 'Administration' : 'Cerebrate');
|
2020-06-21 21:31:30 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
public function add()
|
|
|
|
{
|
2020-08-07 21:47:04 +02:00
|
|
|
$this->set('metaGroup', $this->isAdmin ? 'Administration' : 'Cerebrate');
|
2022-01-17 17:16:03 +01:00
|
|
|
$validUsers = [];
|
|
|
|
$userConditions = [];
|
|
|
|
$currentUser = $this->ACL->getUser();
|
|
|
|
if (empty($currentUser['role']['perm_admin'])) {
|
|
|
|
if (empty($currentUser['role']['perm_org_admin'])) {
|
|
|
|
$userConditions['id'] = $currentUser['id'];
|
|
|
|
} else {
|
|
|
|
$role_ids = $this->Users->Roles->find()->where(['perm_admin' => 0])->all()->extract('id')->toList();
|
|
|
|
$userConditions['role_id IN'] = $role_ids;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
$users = $this->Users->find('list');
|
|
|
|
if (!empty($userConditions)) {
|
|
|
|
$users->where($userConditions);
|
|
|
|
}
|
2022-01-19 14:39:03 +01:00
|
|
|
$users = $users->order(['username' => 'asc'])->all()->toArray();
|
2020-08-07 21:47:04 +02:00
|
|
|
$this->CRUD->add([
|
2022-01-17 17:16:03 +01:00
|
|
|
'displayOnSuccess' => 'authkey_display',
|
|
|
|
'beforeSave' => function($data) use ($users) {
|
|
|
|
if (!in_array($data['user_id'], array_keys($users))) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
return $data;
|
|
|
|
}
|
2020-08-07 21:47:04 +02:00
|
|
|
]);
|
2021-01-14 11:33:51 +01:00
|
|
|
$responsePayload = $this->CRUD->getResponsePayload([
|
|
|
|
'displayOnSuccess' => 'authkey_display'
|
|
|
|
]);
|
2021-01-11 16:28:07 +01:00
|
|
|
if (!empty($responsePayload)) {
|
|
|
|
return $responsePayload;
|
2020-06-21 21:31:30 +02:00
|
|
|
}
|
|
|
|
$this->loadModel('Users');
|
|
|
|
$dropdownData = [
|
2022-01-17 17:16:03 +01:00
|
|
|
'user' => $users
|
2020-06-21 21:31:30 +02:00
|
|
|
];
|
|
|
|
$this->set(compact('dropdownData'));
|
|
|
|
}
|
|
|
|
}
|