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

@@ -298,7 +298,7 @@ class Blog extends CI_Controller
$categories = $this->BlogModel->getCategories();
$this->load->view('admin/sidebar', ['title' => 'Blog-Post erstellen', 'additionalStyles' => ['lib/medium-editor.min.css', 'lib/default.min.css', 'lib/medium-editor-insert-plugin.min.css']]);
$this->load->view('admin/blog_edit', ['categories' => $categories, 'postID' => $postID, 'contents' => $contents, 'translations' => $translations, 'postLanguage' => $lang]);
$this->load->view('admin/footer', ['additionalScripts' => 'lib/medium-editor.min.js,lib/handlebars.runtime-v4.0.10.js,lib/jquery-sortable.min.js,lib/jquery.ui.widget.js,lib/jquery.iframe-transport.js,lib/jquery.fileupload.js,lib/medium-editor-insert-plugin.min.js,lib/autolist.min.js,lib/highlight.pack.js,lib/quill.min.js,blog-edit.js']);
$this->load->view('admin/footer', ['additionalScripts' => ['lib/medium-editor.min.js', 'lib/handlebars.runtime-v4.0.10.js', 'lib/jquery-sortable.min.js', 'lib/jquery.ui.widget.js', 'lib/jquery.iframe-transport.js', 'lib/jquery.fileupload.js', 'lib/medium-editor-insert-plugin.min.js', 'lib/autolist.min.js', 'lib/highlight.pack.js', 'lib/quill.min.js', 'blog-edit.js']]);
}
public function history($postID = NULL)

View File

@@ -1,7 +1,7 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Dashboard extends CI_Controller {
class Dashboard extends MY_Controller {
public function __construct() {
parent::__construct();
@@ -9,7 +9,8 @@ class Dashboard extends CI_Controller {
public function index()
{
if (!isset($_SESSION['user']) || empty($_SESSION['user']) || $_SESSION['user']['rank'] < 6) redirect(base_url('login'));
$this->neededPermission('dashboard.view');
$this->load->view('admin/sidebar', ['title' => 'Dashboard']);
$this->load->view('admin/dashboard');
$this->load->view('admin/footer');

View File

@@ -1,74 +0,0 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Downloads extends CI_Controller
{
public function __construct()
{
parent::__construct();
$this->load->model('downloadsModel', '', TRUE);
$this->load->model('FileModel', '', TRUE);
}
public function index()
{
if (!isset($_SESSION['user']) || empty($_SESSION['user']) || $_SESSION['user']['rank'] < 9) redirect(base_url('login'));
$downloads = $this->downloadsModel->getDownloads();
$this->load->view('admin/sidebar', ['title' => 'Alle Downloads']);
$this->load->view('admin/downloads', ['downloads' => $downloads]);
$this->load->view('admin/footer');
}
public function edit($id = NULL)
{
if (!isset($_SESSION['user']) || empty($_SESSION['user']) || $_SESSION['user']['rank'] < 9) redirect(base_url('login'));
$edit = $id === NULL ? false : true;
$p = $this->input->post(['title', 'description', 'descriptionEnglish', 'image', 'url', 'datetime']);
if ($edit) {
if ($this->downloadsModel->checkIfExists($id)) {
$downloadContent = $this->downloadsModel->getDownload($id);
} else {
redirect(base_url('admin/downloads/edit'));
}
if ($p['title'] != NULL && $p['description'] != NULL && $p['datetime'] != NULL && $p['url'] !== NULL) {
$imgurl = '/assets/images/placeholder.jpg';
if (isset($_FILES['downloadImage']) && $_FILES['downloadImage']['size'] > 0) {
$fileName = $_FILES['downloadImage']['name'];
$tmpName = $_FILES['downloadImage']['tmp_name'];
$fileSize = $_FILES['downloadImage']['size'];
$fileType = $_FILES['downloadImage']['type'];
unset($_FILES['downloadImage']);
$imgurl = $this->FileModel->uploadFile($fileName, $tmpName, $fileSize, $fileType);
}
$this->downloadsModel->addNewDownload($p['datetime'], $p['title'], $p['description'], $p['descriptionEnglish'], $imgurl, $p['url']);
redirect(base_url('admin/downloads/edit/' . $id));
}
$this->load->view('admin/sidebar', ['title' => 'Download-Eintrag bearbeiten']);
$this->load->view('admin/download_edit', ['edit' => $edit, 'content' => $downloadContent]);
$this->load->view('admin/footer');
} else {
if ($p['title'] != NULL && $p['description'] != NULL && $p['datetime'] != NULL && isset($_FILES['downloadImage']) && $_FILES['downloadImage']['size'] > 0 && $p['url'] !== NULL) {
$fileName = $_FILES['downloadImage']['name'];
$tmpName = $_FILES['downloadImage']['tmp_name'];
$fileSize = $_FILES['downloadImage']['size'];
$fileType = $_FILES['downloadImage']['type'];
$imgurl = $this->FileModel->uploadFile($fileName, $tmpName, $fileSize, $fileType);
unset($_FILES['downloadImage']);
$this->downloadsModel->addNewDownload($p['datetime'], $p['title'], $p['description'], $p['descriptionEnglish'], $imgurl, $p['url']);
redirect(base_url('admin/downloads/edit'));
}
$this->load->view('admin/sidebar', ['title' => 'Download-Eintrag erstellen']);
$this->load->view('admin/download_edit', ['edit' => $edit]);
$this->load->view('admin/footer');
}
}
}

View File

@@ -1,7 +1,7 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Feedback extends CI_Controller
class Feedback extends MY_Controller
{
public function __construct()
@@ -11,7 +11,7 @@ class Feedback extends CI_Controller
}
public function index() {
if (!isset($_SESSION['user']) || empty($_SESSION['user']) || $_SESSION['user']['rank'] < 9) redirect(base_url('login'));
$this->neededPermission('feedback.receive');
$feedback = $this->MessageModel->getFeedbackMessages();
@@ -21,7 +21,7 @@ class Feedback extends CI_Controller
}
public function takeover($id = null, $state = 1) {
if (!isset($_SESSION['user']) || empty($_SESSION['user']) || $_SESSION['user']['rank'] < 9) redirect(base_url('login'));
$this->neededPermission('feedback.reply');
if($id != null) {
$this->MessageModel->setFeedbackSupporter($id, $_SESSION['user']['ID'], $state);
@@ -31,7 +31,7 @@ class Feedback extends CI_Controller
}
public function change($id) {
if (!isset($_SESSION['user']) || empty($_SESSION['user']) || $_SESSION['user']['rank'] < 9) redirect(base_url('login'));
$this->neededPermission('feedback.reply');
if($id != null) {
$newStatus = $this->input->post('feedbackState');
@@ -44,7 +44,7 @@ class Feedback extends CI_Controller
public function archive() {
// header('Content-Type: application/json');
if (!isset($_SESSION['user']) || empty($_SESSION['user']) || $_SESSION['user']['rank'] < 9) {
if (!$this->hasPermission('feedback.reply')) {
echo json_encode(['type' => 'error', 'message' => 'Du musst eingeloggt sein, um Feedbacks zu beantworten.']);
exit;
}

View File

@@ -1,7 +1,7 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Files extends CI_Controller
class Files extends MY_Controller
{
public function __construct()
@@ -12,7 +12,7 @@ class Files extends CI_Controller
public function index()
{
if (!isset($_SESSION['user']) || empty($_SESSION['user']) || $_SESSION['user']['rank'] < 9) redirect(base_url('login'));
$this->neededPermission('file.view');
if(isset($_FILES['fileUpload'])) {
$fileName = $_FILES['fileUpload']['name'];
@@ -20,7 +20,7 @@ class Files extends CI_Controller
$fileSize = $_FILES['fileUpload']['size'];
$fileType = $_FILES['fileUpload']['type'];
$this->FileModel->uploadFile($fileName, $tmpName, $fileSize, $fileType);
$this->FileModel->uploadFile($fileName, $tmpName, $fileSize, $fileType, false);
unset($_FILES['fileUpload']);
@@ -36,7 +36,8 @@ class Files extends CI_Controller
}
public function delete() {
if (!isset($_SESSION['user']) || empty($_SESSION['user']) || $_SESSION['user']['rank'] < 9) redirect(base_url('login'));
$this->neededPermission('file.delete');
$id = filter_input(INPUT_POST, "id");
$this->FileModel->delete($id);
}
@@ -44,7 +45,7 @@ class Files extends CI_Controller
public function uploadImage()
{
header("Content-Type: application/json");
if (!isset($_SESSION['user']) || empty($_SESSION['user']) || $_SESSION['user']['rank'] < 6) {
if (!$this->hasPermission('file.uploadManual')) {
echo json_encode([
'success' => false,
'message' => '<b>Fehler beim Upload!</b> Aufgrund von zu geringen Zugriffsrechten konnte das Bild leider nicht hochgeladen werden. Sollte es sich dabei um ein Irrtum handeln, kontaktiere bitte einen Admin über das Kontaktformular.'

View File

@@ -1,7 +1,7 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Projects extends CI_Controller
class Projects extends MY_Controller
{
public function __construct()
@@ -13,7 +13,7 @@
public function index()
{
if (!isset($_SESSION['user']) || empty($_SESSION['user']) || $_SESSION['user']['rank'] < 9) redirect(base_url('login'));
$this->neededPermission('projects.view');
$entries = $this->ProjectsModel->getEntries('all');
$categories = $this->ProjectsModel->getCategories('all');
@@ -25,12 +25,17 @@
public function edit($id = NULL)
{
if (!isset($_SESSION['user']) || empty($_SESSION['user']) || $_SESSION['user']['rank'] < 9) redirect(base_url('login'));
$this->neededPermission('projects.create');
$edit = $id === NULL ? false : true;
$content = null;
$projectCategories = [];
if ($edit) {
// TODO: Check if project is created by user or not
$this->neededPermission('projects.edit');
if ($this->ProjectsModel->checkIfExists($id)) {
$content = $this->ProjectsModel->getEntry($id);
$content = $this->ProjectsModel->mergeFullTranslationData($content)[0];
@@ -50,8 +55,16 @@
public function sendEdit()
{
header('Content-Type: application/json');
if (!isset($_SESSION['user']) || empty($_SESSION['user']) || $_SESSION['user']['rank'] < 9) {
echo json_encode(['success' => false, 'message' => 'Du hast nicht genügend Rechte, um Projekte zu erstellen bzw. bearbeiten.']);
if (!$this->hasPermission('projects.create')) {
echo json_encode(['success' => false, 'message' => 'Du hast nicht genügend Rechte, um Projekte zu erstellen.']);
exit;
}
$editingID = $this->input->post('editingID');
// TODO: Check if user is author of project
if($editingID !== '-1' && !$this->hasPermission('projects.edit')) {
echo json_encode(['success' => false, 'message' => 'Du hast nicht genügend Rechte, um Projekte zu bearbeiten.']);
exit;
}
@@ -83,7 +96,6 @@
$date = date('Y-m-d H:i:s', strtotime($this->input->post('date')));
$image = $this->input->post('image');
$editingID = $this->input->post('editingID');
if($editingID == '-1' && $this->ProjectsModel->checkIfNameExists($url)) {
echo json_encode(['success' => false, 'message' => 'Die angegebene URL ist bereits vergeben.']);
@@ -102,14 +114,17 @@
public function delete()
{
if (!isset($_SESSION['user']) || empty($_SESSION['user']) || $_SESSION['user']['rank'] < 9) redirect(base_url('login'));
// TODO: Check if user is author of project
$this->neededPermission('projects.delete');
$id = filter_input(INPUT_POST, "id");
$this->ProjectsModel->delete($id);
}
public function delete_category()
{
if (!isset($_SESSION['user']) || empty($_SESSION['user']) || $_SESSION['user']['rank'] < 9) redirect(base_url('login'));
$this->neededPermission('projects.deleteCategory');
$id = filter_input(INPUT_POST, "id");
$this->ProjectsModel->deleteCategory($id);
}

View File

@@ -1,7 +1,7 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Redirects extends CI_Controller
class Redirects extends MY_Controller
{
public function __construct()
@@ -12,7 +12,8 @@ class Redirects extends CI_Controller
public function index()
{
if (!isset($_SESSION['user']) || empty($_SESSION['user']) || $_SESSION['user']['rank'] < 9) redirect(base_url('login'));
$this->neededPermission('redirect.view');
$redirects = $this->RedirectModel->getItems();
$this->load->view('admin/sidebar', ['title' => 'Alle Weiterleitungen']);
$this->load->view('admin/redirects', ['redirects' => $redirects]);
@@ -20,7 +21,7 @@ class Redirects extends CI_Controller
}
public function addRedirect() {
if (!isset($_SESSION['user']) || empty($_SESSION['user']) || $_SESSION['user']['rank'] < 9) redirect(base_url('login'));
$this->neededPermission('redirect.create');
$id = $this->input->post('redirectID');
$name = $this->input->post('redirectName');
@@ -28,6 +29,8 @@ class Redirects extends CI_Controller
if(isset($name) && isset($url)) {
if(isset($id)) {
$this->neededPermission('redirect.edit');
$this->RedirectModel->editRedirect($id, $url, $name);
} else {
$this->RedirectModel->insertRedirect($url, $name);
@@ -38,7 +41,7 @@ class Redirects extends CI_Controller
}
public function removeRedirect($id = null) {
if (!isset($_SESSION['user']) || empty($_SESSION['user']) || $_SESSION['user']['rank'] < 9) redirect(base_url('login'));
$this->neededPermission('redirect.delete');
if($id != null) {
$this->RedirectModel->removeRedirect($id);

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']]);
}
}