forked from jungepiraten/vpanel
/
roles.php
107 lines (91 loc) · 3.12 KB
/
roles.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
<?php
require_once(dirname(__FILE__) . "/config.inc.php");
require_once(VPANEL_UI . "/session.class.php");
$session = $config->getSession();
$ui = $session->getTemplate();
if (!$session->isAllowed("roles_show")) {
$ui->viewLogin();
exit;
}
require_once(VPANEL_CORE . "/role.class.php");
function parseRoleFormular($session, &$role = null) {
$label = $session->getVariable("label");
$description = $session->getVariable("description");
if ($role == null) {
$role = new Role($session->getStorage());
}
$role->setLabel($label);
$role->setDescription($description);
$role->save();
}
switch ($session->hasVariable("mode") ? $session->getVariable("mode") : null) {
case "details":
$roleid = $session->getIntVariable("roleid");
$role = $session->getStorage()->getRole($roleid);
if ($session->getBoolVariable("save")) {
if (!$session->isAllowed("roles_modify")) {
$ui->viewLogin();
exit;
}
parseRoleFormular($session, $role);
}
if ($session->getBoolVariable("savepermissions")) {
if (!$session->isAllowed("roles_modify")) {
$ui->viewLogin();
exit;
}
$permissions = $session->getListVariable("permissions");
$transitive_perms = $session->getListVariable("transitive_perms");
$permissionsSaved = array();
foreach ($role->getPermissions() as $permission) {
$permissionkey = $permission->getPermissionID() . ($permission->getPermission()->isGlobal() ? "" : "-" . $permission->getGliederungID());
if (!in_array($permissionkey, $permissions)) {
$role->delPermission($permission->getPermissionID(), $permission->getGliederungID());
} else {
$permissionid = $permission->getPermissionID();
$gliederungid = $permission->getGliederungID();
$role->setPermission($permissionid, $gliederungid, in_array($permissionkey, $transitive_perms));
$permissionsSaved[] = $permissionkey;
}
}
// Speichere neue Permissions
foreach (array_diff($permissions, $permissionsSaved) as $permissionkey) {
$perm = explode("-", $permissionkey);
$permissionid = $perm[0];
$gliederungid = isset($perm[1]) ? $perm[1] : null;
$role->setPermission($permissionid, $gliederungid, in_array($permissionkey, $transitive_perms));
}
$role->save();
}
$users = $session->getStorage()->getUserList();
$permissions_global = $session->getStorage()->getPermissionGlobalList();
$permissions_local = $session->getStorage()->getPermissionLocalList();
$gliederungen = $session->getStorage()->getGliederungList();
$ui->viewRoleDetails($role, $users, $permissions_global, $permissions_local, $gliederungen);
exit;
case "create":
if ($session->getBoolVariable("save")) {
if (!$session->isAllowed("roles_create")) {
$ui->viewLogin();
exit;
}
parseRoleFormular($session, $role);
$ui->redirect($session->getLink("roles_details", $role->getRoleID()));
}
$ui->viewRoleCreate();
exit;
case "delete":
if (!$session->isAllowed("roles_delete")) {
$ui->viewLogin();
exit;
}
$role = $session->getStorage()->getRole($session->getIntVariable("roleid"));
$role->delete();
$ui->redirect($session->getLink("roles"));
exit;
default:
$roles = $session->getStorage()->getRoleList();
$ui->viewRoleList($roles);
exit;
}
?>