14bc7d42b245d9e36d5194abfb51ee673c0ba57c
[mirrors/Kyberia-bloodline.git] / wwwroot / backend / mysql / permissions.inc
1 <?php
2
3 class permissions {
4
5 //trillion lights to Hierarchy!
6 //$node input parameter can be a numeric node_id of a node-to-be-checked or a hash containing node_id,node_vector
7 public static function checkPerms($node) {
8 // new permissions checking
9 global $db;
10
11 if (is_array($node)) {
12 $node_id=$node['node_id'];
13 $node_vector=$node['node_vector'];
14 }
15
16 elseif (is_numeric($node)) {
17 $node_id=$node;
18 }
19
20
21 if (empty($node_vector)) {
22 $set=$db->query("select node_vector from nodes where node_id='$node_id'");
23 $set->next();
24 $node_vector=$set->getString('node_vector');
25 }
26
27 $user_id=(empty($_SESSION['user_id'])) ? "" : $_SESSION['user_id'];
28
29 $perms['r'] = 0;
30 $perms['w'] = 0;
31 $perms['node_permission'] = '';
32 $perms['node_system_access'] = '';
33 $perms['node_external_access'] = '';
34
35 if (!is_numeric($node_id))
36 return $perms;
37
38 $nv_arr = str_split($node_vector, VECTOR_CHARS);
39 $nv_arr = array_map('intval', $nv_arr);
40 $node_list = implode(', ', $nv_arr);
41 $node_list.=",$node_id";
42
43 $q_np = sprintf('select n.node_id, n.node_creator, length(n.node_vector) as nv_length
44 , n.node_system_access, n.node_external_access, na.node_permission
45 from nodes n
46 left join node_access na on na.node_id = n.node_id
47 and na.user_id = %d
48 where n.node_id in(%s)
49 order by nv_length desc', $user_id, $node_list);
50
51 $qr_np = $db->query($q_np);
52
53 while ($qr_np->next()) {
54 // nastavim si prava hlavnej zvolenej nody
55 if ($perms['node_permission'] == '' && $perms['node_system_access'] == '') {
56
57 $perms['node_permission'] = $qr_np->getString('node_permission');
58 $perms['node_system_access'] = $qr_np->getString('node_system_access');
59 $perms['node_external_access'] = $qr_np->getString('node_external_access');
60
61 // r/w prava podla system accessu
62 if ($perms['node_system_access'] == 'public') {
63 $perms['r'] = 1;
64 $perms['w'] = 1;
65 }
66 elseif ($perms['node_system_access'] == 'moderated') {
67 $perms['r'] = 1;
68 $perms['w'] = 0;
69 }
70 elseif ($perms['node_system_access'] == 'private') {
71 $perms['r'] = 0;
72 $perms['w'] = 0;
73 }
74
75 if ($qr_np->getInt('node_creator') == $user_id) {
76 $perms['node_permission'] = 'owner';
77 $perms['r'] = 1;
78 $perms['w'] = 1;
79 break;
80 }
81
82 if ($perms['node_system_access'] != 'private'
83 && (empty($_SESSION['user_id']))
84 && $perms['node_external_access'] == 'yes') {
85 $perms['r'] = 1;
86 $perms['w'] = 0;
87 break;
88 }
89
90 } // if ($perms['node_permission'] == '' && $perms['node_system_access'] == '')
91 else {
92 // ked som v public alebo moderated fore a dalsie nadradene su uz privatne
93 if ($node_system_access != 'private' && $qr_np->getString('node_system_access') == 'private')
94 break;
95 // ked som v privatnom fore a dalsie nadradene su public alebo moderated
96 if ($node_system_access == 'private' && $qr_np->getString('node_system_access') != 'private')
97 break;
98 }
99
100 $node_permission = $qr_np->getString('node_permission');
101 $node_system_access = $qr_np->getString('node_system_access');
102
103 // nastavim r/w podla permissions a skoncim to
104 if ($node_permission == 'ban') {
105 $perms['r'] = 0;
106 $perms['w'] = 0;
107 break;
108 }
109 elseif ($node_permission == 'silence') {
110 $perms['r'] = 1;
111 $perms['w'] = 0;
112 break;
113 }
114 elseif ($node_permission == 'op') {
115 $perms['r'] = 1;
116 $perms['w'] = 1;
117 break;
118 }
119 elseif ($node_permission == 'master') {
120 $perms['r'] = 1;
121 $perms['w'] = 1;
122 break;
123 }
124 elseif ($node_permission == 'access') {
125 $perms['r'] = 1;
126 $perms['w'] = 1;
127 break;
128 }
129
130 if ($qr_np->getString('node_creator') == $user_id) {
131 $perms['node_permission'] = 'owner';
132 $perms['r'] = 1;
133 $perms['w'] = 1;
134 break;
135 }
136
137 }
138 return $perms;
139 }
140
141 }
142
143 ?>
This page took 0.469166 seconds and 3 git commands to generate.