Archived
1
0

Changes of the last few months including restructuring system from using only ranks to permissions

This commit is contained in:
Marcel
2018-12-26 18:19:28 +01:00
parent 72f3434803
commit 1a1ac17ecf
38 changed files with 845 additions and 361 deletions

View File

@@ -3,27 +3,89 @@ defined('BASEPATH') OR exit('No direct script access allowed');
class Users extends MY_Controller
{
private $availablePermissions;
public function __construct()
{
parent::__construct();
$this->load->model('UserModel', '', TRUE);
$this->availablePermissions = [
'projects' => [
'view',
'create',
'editOwn',
'edit',
'deleteOwn',
'delete',
'deleteCategory',
],
'blog' => [
'view',
'create',
'editOwn',
'edit',
'deleteOwn',
'delete',
'deleteOwnFinally',
'deleteFinally',
'createCategory',
'publishNow',
'publish',
'publishSelf',
],
'file' => [
'view',
'upload',
'uploadManually',
'delete',
],
'redirect' => [
'view',
'create',
'edit',
'delete',
],
'user' => [
'disableAds',
'view',
'viewDetails',
'changeRank',
'editPermissions',
'ban',
'deletePost',
],
'reports' => [
'receive',
],
'feedback' => [
'receive',
'reply',
],
'contact' => [
'view',
'answer',
],
'dashboard' => [
'view',
],
];
}
public function index()
{
if (!isset($_SESSION['user']) || empty($_SESSION['user']) || $_SESSION['user']['rank'] < 9) redirect(base_url('login'));
$this->neededPermission('user.view');
$usersData = $this->UserModel->getUserList(50, 0);
$this->load->view('admin/sidebar', ['title' => 'Alle Nutzer']);
$this->load->view('admin/users', ['users' => $usersData]);
$this->load->view('admin/footer');
$this->load->view('admin/footer', ['additionalScripts' => ['admin_users.js']]);
}
public function details($userID = NULL)
{
if (!isset($_SESSION['user']) || empty($_SESSION['user']) || $_SESSION['user']['rank'] < 9) redirect(base_url('login'));
$this->neededPermission('user.viewDetails');
if ($userID == NULL) redirect(base_url('admin/users'));
@@ -39,7 +101,7 @@ class Users extends MY_Controller
public function settings($userID = NULL)
{
if (!isset($_SESSION['user']) || empty($_SESSION['user']) || $_SESSION['user']['rank'] < 9) redirect(base_url('login'));
$this->neededPermission('user.viewDetails');
if ($userID == NULL) redirect(base_url('admin/users'));
@@ -48,7 +110,9 @@ class Users extends MY_Controller
if ($userData == null) redirect(base_url('admin/users'));
$userData = $userData[0];
if (isset($_POST['rank'])) {
$reload = false;
if ($this->hasPermission('user.changeRank') && isset($_POST['rank'])) {
$rank = intval($_POST['rank']);
if (($rank < 1) || ($rank > 3 && $rank < 6) || $rank > 10) {
redirect(base_url(uri_string()));
@@ -74,11 +138,40 @@ class Users extends MY_Controller
$this->UserModel->insertIntoHistory($historyData);
// Update profile
$this->UserModel->updateProfile(['rank' => $rank], $userID);
$reload = true;
}
if($this->hasPermission('user.editPermissions') && isset($_POST['permissions'])) {
$perms = array_keys($_POST['permissions']);
foreach ($this->availablePermissions as $group => $permissions) {
foreach ($permissions as $permission) {
$userHasPermission = $this->UserModel->hasPermission($userID, $group, $permission);
if(in_array($group . $permission, $perms)) { // Permission was given by user
if(!$userHasPermission) { // Subject hasn't got the permission already
$this->UserModel->addPermission($userID, $group, $permission, $_SESSION['user']['ID']);
}
} else {
if($userHasPermission) {
$this->UserModel->revokePermission($userID, $group, $permission);
}
}
}
}
$reload = true;
}
if($reload) {
redirect(base_url(uri_string()));
}
$permissions = $this->UserModel->getPermissions($userID);
$this->load->view('admin/sidebar', ['title' => 'Nutzer-Einstellungen - ' . $userData['displayname']]);
$this->load->view('admin/user_settings', ['user' => $userData]);
$this->load->view('admin/footer');
$this->load->view('admin/user_settings', ['user' => $userData, 'permissions' => $permissions, 'availablePermissions' => $this->availablePermissions]);
$this->load->view('admin/footer', ['additionalScripts' => ['user-edit.js']]);
}
}