6ef959610a41be99105e7433cf45730f8461abf2
[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 // external access must go first
62 if ($user_id == "") {
63 if ($perms['node_system_access'] != 'private'
64 && $perms['node_external_access'] == 'yes') {
65 $perms['r'] = 1;
66 $perms['w'] = 0;
67 break;
68 } else {
69 $perms['r'] = 0;
70 $perms['w'] = 0;
71 break;
72 }
73 }
74
75 // r/w prava podla system accessu
76 if ($perms['node_system_access'] == 'public') {
77 $perms['r'] = 1;
78 $perms['w'] = 1;
79 }
80 elseif ($perms['node_system_access'] == 'moderated') {
81 $perms['r'] = 1;
82 $perms['w'] = 0;
83 }
84 elseif ($perms['node_system_access'] == 'private') {
85 $perms['r'] = 0;
86 $perms['w'] = 0;
87 }
88
89 if ($qr_np->getInt('node_creator') == $user_id) {
90 $perms['node_permission'] = 'owner';
91 $perms['r'] = 1;
92 $perms['w'] = 1;
93 break;
94 }
95
96 } // if ($perms['node_permission'] == '' && $perms['node_system_access'] == '')
97 else {
98 // ked som v public alebo moderated fore a dalsie nadradene su uz privatne
99 if ($node_system_access != 'private' && $qr_np->getString('node_system_access') == 'private')
100 break;
101 // ked som v privatnom fore a dalsie nadradene su public alebo moderated
102 if ($node_system_access == 'private' && $qr_np->getString('node_system_access') != 'private')
103 break;
104 }
105
106 $node_permission = $qr_np->getString('node_permission');
107 $node_system_access = $qr_np->getString('node_system_access');
108
109 // nastavim r/w podla permissions a skoncim to
110 if ($node_permission == 'ban') {
111 $perms['r'] = 0;
112 $perms['w'] = 0;
113 break;
114 }
115 elseif ($node_permission == 'silence') {
116 $perms['r'] = 1;
117 $perms['w'] = 0;
118 break;
119 }
120 elseif ($node_permission == 'op') {
121 $perms['r'] = 1;
122 $perms['w'] = 1;
123 break;
124 }
125 elseif ($node_permission == 'master') {
126 $perms['r'] = 1;
127 $perms['w'] = 1;
128 break;
129 }
130 elseif ($node_permission == 'access') {
131 $perms['r'] = 1;
132 $perms['w'] = 1;
133 break;
134 }
135
136 if ($qr_np->getString('node_creator') == $user_id) {
137 $perms['node_permission'] = 'owner';
138 $perms['r'] = 1;
139 $perms['w'] = 1;
140 break;
141 }
142
143 }
144 return $perms;
145 }
146
147 }
148
149 ?>
This page took 0.352352 seconds and 3 git commands to generate.