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