Changes of the last few months including restructuring system from using only ranks to permissions
This commit is contained in:
@@ -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']]);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user