bootstrap.sys.inc.php 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291
  1. <?php
  2. /**
  3. * [WeEngine System] Copyright (c) 2014 WE7.CC
  4. * WeEngine is NOT a free software, it under the license terms, visited http://www.we7.cc/ for more details.
  5. */
  6. load()->model('user');
  7. load()->func('tpl');
  8. if (file_exists(IA_ROOT . '/framework/model/permission.mod.php')) {
  9. load()->model('permission');
  10. } else {
  11. function permission_build() {
  12. global $_W;
  13. $we7_file_permission = require IA_ROOT . '/web/common/permission.inc.php';
  14. $permission_frames = require IA_ROOT . '/web/common/frames.inc.php';
  15. if (!in_array($_W['role'], array(ACCOUNT_MANAGE_NAME_OPERATOR, ACCOUNT_MANAGE_NAME_MANAGER)) || empty($_W['uniacid'])) {
  16. return $we7_file_permission;
  17. }
  18. $cachekey = cache_system_key("permission:{$_W['uniacid']}:{$_W['uid']}");
  19. $cache = cache_load($cachekey);
  20. if (!empty($cache)) {
  21. return $cache;
  22. }
  23. $permission_exist = permission_account_user_permission_exist($_W['uid'], $_W['uniacid']);
  24. if (empty($permission_exist)) {
  25. $we7_file_permission['platform'][$_W['role']] = array('platform*');
  26. $we7_file_permission['site'][$_W['role']] = array('site*');
  27. $we7_file_permission['mc'][$_W['role']] = array('mc*');
  28. $we7_file_permission['profile'][$_W['role']] = array('profile*');
  29. $we7_file_permission['module'][$_W['role']] = array('manage-account', 'display');
  30. $we7_file_permission['wxapp'][$_W['role']] = array('display', 'payment', 'post', 'version');
  31. cache_write($cachekey, $we7_file_permission);
  32. return $we7_file_permission;
  33. }
  34. $user_account_permission = permission_account_user_menu($_W['uid'], $_W['uniacid'], PERMISSION_ACCOUNT);
  35. $user_wxapp_permission = permission_account_user_menu($_W['uid'], $_W['uniacid'], PERMISSION_WXAPP);
  36. $user_permission = array_merge($user_account_permission, $user_wxapp_permission);
  37. $permission_contain = array('account', 'wxapp', 'system');
  38. $section = array();
  39. $permission_result = array();
  40. foreach ($permission_frames as $key => $frames) {
  41. if (!in_array($key, $permission_contain) || empty($frames['section'])) {
  42. continue;
  43. }
  44. foreach ($frames['section'] as $frame_key => $frame) {
  45. if (empty($frame['menu'])) {
  46. continue;
  47. }
  48. $section[$key][$frame_key] = $frame['menu'];
  49. }
  50. }
  51. $account = permission_get_nameandurl($section[$permission_contain[0]]);
  52. $wxapp = permission_get_nameandurl($section[$permission_contain[1]]);
  53. $system = permission_get_nameandurl($section[$permission_contain[2]]);
  54. $permission_result = array_merge($account, $wxapp, $system);
  55. foreach ($permission_result as $permission_val) {
  56. if (in_array($permission_val['permission_name'], $user_permission)) {
  57. $we7_file_permission[$permission_val['controller']][$_W['role']][] = $permission_val['action'];
  58. }
  59. }
  60. cache_write($cachekey, $we7_file_permission);
  61. return $we7_file_permission;
  62. }
  63. function permission_account_user_role($uid = 0, $uniacid = 0) {
  64. global $_W;
  65. load()->model('user');
  66. $role = '';
  67. $uid = empty($uid) ? $_W['uid'] : intval($uid);
  68. if (user_is_founder($uid) && !user_is_vice_founder($uid)) {
  69. return ACCOUNT_MANAGE_NAME_FOUNDER;
  70. }
  71. if (user_is_vice_founder($uid)) {
  72. return ACCOUNT_MANAGE_NAME_VICE_FOUNDER;
  73. }
  74. if (!empty($uniacid)) {
  75. $role = pdo_getcolumn('uni_account_users', array('uid' => $uid, 'uniacid' => $uniacid), 'role');
  76. if ($role == ACCOUNT_MANAGE_NAME_OWNER) {
  77. $role = ACCOUNT_MANAGE_NAME_OWNER;
  78. } elseif ($role == ACCOUNT_MANAGE_NAME_VICE_FOUNDER) {
  79. $role = ACCOUNT_MANAGE_NAME_VICE_FOUNDER;
  80. } elseif ($role == ACCOUNT_MANAGE_NAME_MANAGER) {
  81. $role = ACCOUNT_MANAGE_NAME_MANAGER;
  82. } elseif ($role == ACCOUNT_MANAGE_NAME_OPERATOR) {
  83. $role = ACCOUNT_MANAGE_NAME_OPERATOR;
  84. } elseif ($role == ACCOUNT_MANAGE_NAME_CLERK) {
  85. $role = ACCOUNT_MANAGE_NAME_CLERK;
  86. }
  87. } else {
  88. $roles = pdo_getall('uni_account_users', array('uid' => $uid), array('role'), 'role');
  89. $roles = array_keys($roles);
  90. if (in_array(ACCOUNT_MANAGE_NAME_VICE_FOUNDER, $roles)) {
  91. $role = ACCOUNT_MANAGE_NAME_VICE_FOUNDER;
  92. } elseif (in_array(ACCOUNT_MANAGE_NAME_OWNER, $roles)) {
  93. $role = ACCOUNT_MANAGE_NAME_OWNER;
  94. } elseif (in_array(ACCOUNT_MANAGE_NAME_MANAGER, $roles)) {
  95. $role = ACCOUNT_MANAGE_NAME_MANAGER;
  96. } elseif (in_array(ACCOUNT_MANAGE_NAME_OPERATOR, $roles)) {
  97. $role = ACCOUNT_MANAGE_NAME_OPERATOR;
  98. } elseif (in_array(ACCOUNT_MANAGE_NAME_CLERK, $roles)) {
  99. $role = ACCOUNT_MANAGE_NAME_CLERK;
  100. }
  101. }
  102. $role = empty($role) ? ACCOUNT_MANAGE_NAME_OPERATOR : $role;
  103. return $role;
  104. }
  105. function permission_account_user_permission_exist($uid = 0, $uniacid = 0) {
  106. global $_W;
  107. load()->model('user');
  108. $uid = intval($uid) > 0 ? $uid : $_W['uid'];
  109. $uniacid = intval($uniacid) > 0 ? $uniacid : $_W['uniacid'];
  110. if (user_is_founder($uid)) {
  111. return false;
  112. }
  113. if (FRAME == 'system') {
  114. return true;
  115. }
  116. $is_exist = pdo_get('users_permission', array('uid' => $uid, 'uniacid' => $uniacid), array('id'));
  117. if(empty($is_exist)) {
  118. return false;
  119. } else {
  120. return true;
  121. }
  122. }
  123. function permission_account_user($type = 'system') {
  124. global $_W;
  125. $user_permission = pdo_getcolumn('users_permission', array('uid' => $_W['uid'], 'uniacid' => $_W['uniacid'], 'type' => $type), 'permission');
  126. if (!empty($user_permission)) {
  127. $user_permission = explode('|', $user_permission);
  128. } else {
  129. $user_permission = array('account*', 'wxapp*');
  130. }
  131. $permission_append = frames_menu_append();
  132. if (!empty($permission_append[$_W['role']])) {
  133. $user_permission = array_merge($user_permission, $permission_append[$_W['role']]);
  134. }
  135. if (empty($_W['role']) && empty($_W['uniacid'])) {
  136. $user_permission = array_merge($user_permission, $permission_append['operator']);
  137. }
  138. return (array)$user_permission;
  139. }
  140. function permission_account_user_menu($uid, $uniacid, $type) {
  141. $user_menu_permission = array();
  142. $uid = intval($uid);
  143. $uniacid = intval($uniacid);
  144. $type = trim($type);
  145. if (empty($uid) || empty($uniacid) || empty($type)) {
  146. return error(-1, '参数错误!');
  147. }
  148. $permission_exist = permission_account_user_permission_exist($uid, $uniacid);
  149. if (empty($permission_exist)) {
  150. return array('all');
  151. }
  152. if ($type == 'modules') {
  153. $user_menu_permission = pdo_fetchall("SELECT * FROM " . tablename('users_permission') . " WHERE uniacid = :uniacid AND uid = :uid AND type != '" . PERMISSION_ACCOUNT . "' AND type != '" . PERMISSION_WXAPP . "'", array(':uniacid' => $uniacid, ':uid' => $uid), 'type');
  154. } else {
  155. $module = uni_modules_by_uniacid($uniacid);
  156. $module = array_keys($module);
  157. if (in_array($type, $module) || in_array($type, array(PERMISSION_ACCOUNT, PERMISSION_WXAPP, PERMISSION_SYSTEM))) {
  158. $menu_permission = pdo_getcolumn('users_permission', array('uniacid' => $uniacid, 'uid' => $uid, 'type' => $type), 'permission');
  159. if (!empty($menu_permission)) {
  160. $user_menu_permission = explode('|', $menu_permission);
  161. }
  162. }
  163. }
  164. return $user_menu_permission;
  165. }
  166. function permission_menu_name() {
  167. load()->model('system');
  168. $menu_permission = array();
  169. $menu_list = system_menu_permission_list();
  170. $middle_menu = array();
  171. $middle_sub_menu = array();
  172. if (!empty($menu_list)) {
  173. foreach ($menu_list as $nav_id => $section) {
  174. foreach ($section['section'] as $section_id => $section) {
  175. if (!empty($section['menu'])) {
  176. $middle_menu[] = $section['menu'];
  177. }
  178. }
  179. }
  180. }
  181. if (!empty($middle_menu)) {
  182. foreach ($middle_menu as $menu) {
  183. foreach ($menu as $menu_val) {
  184. $menu_permission[] = $menu_val['permission_name'];
  185. if (!empty($menu_val['sub_permission'])) {
  186. $middle_sub_menu[] = $menu_val['sub_permission'];
  187. }
  188. }
  189. }
  190. }
  191. if (!empty($middle_sub_menu)) {
  192. foreach ($middle_sub_menu as $sub_menu) {
  193. foreach ($sub_menu as $sub_menu_val) {
  194. $menu_permission[] = $sub_menu_val['permission_name'];
  195. }
  196. }
  197. }
  198. return $menu_permission;
  199. }
  200. }
  201. if (!function_exists('uni_permission')) {
  202. function uni_permission($uid = 0, $uniacid = 0) {
  203. global $_W;
  204. $role = '';
  205. $uid = empty($uid) ? $_W['uid'] : intval($uid);
  206. $founders = explode(',', $_W['config']['setting']['founder']);
  207. if (in_array($uid, $founders)) {
  208. return ACCOUNT_MANAGE_NAME_FOUNDER;
  209. }
  210. if (!empty($uniacid)) {
  211. $role = pdo_getcolumn('uni_account_users', array('uid' => $uid, 'uniacid' => $uniacid), 'role');
  212. if ($role == ACCOUNT_MANAGE_NAME_OWNER) {
  213. $role = ACCOUNT_MANAGE_NAME_OWNER;
  214. } elseif ($role == ACCOUNT_MANAGE_NAME_MANAGER) {
  215. $role = ACCOUNT_MANAGE_NAME_MANAGER;
  216. } elseif ($role == ACCOUNT_MANAGE_NAME_OPERATOR) {
  217. $role = ACCOUNT_MANAGE_NAME_OPERATOR;
  218. }
  219. } else {
  220. $roles = pdo_getall('uni_account_users', array('uid' => $uid), array('role'), 'role');
  221. $roles = array_keys($roles);
  222. if (in_array(ACCOUNT_MANAGE_NAME_OWNER, $roles)) {
  223. $role = ACCOUNT_MANAGE_NAME_OWNER;
  224. } elseif (in_array(ACCOUNT_MANAGE_NAME_MANAGER, $roles)) {
  225. $role = ACCOUNT_MANAGE_NAME_MANAGER;
  226. } elseif (in_array(ACCOUNT_MANAGE_NAME_OPERATOR, $roles)) {
  227. $role = ACCOUNT_MANAGE_NAME_OPERATOR;
  228. }
  229. }
  230. return $role;
  231. }
  232. }
  233. $_W['token'] = token();
  234. $session = json_decode(base64_decode($_GPC['__session']), true);
  235. if(is_array($session)) {
  236. $user = user_single(array('uid'=>$session['uid']));
  237. if(is_array($user) && $session['hash'] == md5($user['password'] . $user['salt'])) {
  238. $_W['uid'] = $user['uid'];
  239. $_W['username'] = $user['username'];
  240. $user['currentvisit'] = $user['lastvisit'];
  241. $user['currentip'] = $user['lastip'];
  242. $user['lastvisit'] = $session['lastvisit'];
  243. $user['lastip'] = $session['lastip'];
  244. $_W['user'] = $user;
  245. $founders = explode(',', $_W['config']['setting']['founder']);
  246. $_W['isfounder'] = in_array($_W['uid'], $founders);
  247. unset($founders);
  248. } else {
  249. isetcookie('__session', false, -100);
  250. }
  251. unset($user);
  252. }
  253. unset($session);
  254. if(!empty($_GPC['__uniacid'])) {
  255. $_W['uniacid'] = intval($_GPC['__uniacid']);
  256. $_W['uniaccount'] = $_W['account'] = uni_fetch($_W['uniacid']);
  257. $_W['acid'] = $_W['account']['acid'];
  258. $_W['weid'] = $_W['uniacid'];
  259. if(!empty($_W['uid'])) {
  260. $_W['role'] = uni_permission($_W['uid'], $_W['uniacid']);
  261. }
  262. }
  263. $_W['template'] = 'default';
  264. if(!empty($_W['setting']['basic']['template'])) {
  265. $_W['template'] = $_W['setting']['basic']['template'];
  266. }
  267. load()->func('compat.biz');