AboutPlater.php 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299
  1. <?php
  2. defined('ONLY_ONLY_ONLY') or exit('Access Denied');
  3. /*****************平台方相关如角色权限等******************/
  4. function bizPlater_getFELoginInfo($includePwd=false){
  5. $subSystem=intval(SUBSYS_PLAT_PCWEB);
  6. $GPC=input_param_handle(false);
  7. $ajaxdata = input_getPostObj();
  8. $loginName=isset($ajaxdata["loginName"])?$ajaxdata["loginName"]:$GPC["loginName"];
  9. if(empty($loginName)) throw new GeneralException("","没有传递必要的loginName参数,或者登录名为空!");
  10. if(mb_strlen(trim($loginName))<2) throw new GeneralException("","登录名不能为空且长度至少2位!");
  11. if($includePwd){
  12. $loginPwd=isset($ajaxdata["loginPwd"])?$ajaxdata["loginPwd"]:$GPC["loginPwd"];
  13. if(empty($loginPwd)) throw new GeneralException("","没有传递必要的loginPwd参数,或密码为空!");
  14. if(mb_strlen(trim($loginPwd))<=3) throw new GeneralException("","登录密码不能为空且长度至少3位!");
  15. }
  16. return array("loginName" => $loginName, "loginPwd" => $loginPwd);
  17. }
  18. function bizPlater_cryptLoginPwd($loginPwd){
  19. return md5(md5($loginPwd));
  20. }
  21. function bizPlater_verifyToken(){
  22. $GPC=input_param_handle(false);
  23. $ajaxdata = input_getPostObj();
  24. $loginName=isset($ajaxdata["loginName"])?$ajaxdata["loginName"]:$GPC["loginName"];
  25. if(empty($loginName)) throw new GeneralException("","没有传递必要的loginName参数,或者登录名为空!");
  26. $subSystem=intval(SUBSYS_PLAT_PCWEB);
  27. $loginInfo=bizPlater_getFELoginInfo(false);
  28. $loginName=$loginInfo["loginName"];
  29. $baseUser=pdo_fetch("select * from base_user where deleted=0 and subsystem=:subsystem and `login_name`=:login_name limit 1;",array(
  30. ":subsystem"=>intval($subSystem),
  31. ":login_name"=>trim($loginName),
  32. ));
  33. if(empty($baseUser)) throw new GeneralException("","没有定位到此登录名的用户记录,请确认输入是否正确!");
  34. base_verifyForendToken($baseUser); //前端会话TOKEN校验
  35. return array("baseUser" => $baseUser);
  36. }
  37. //获取当前用户所赋予的角色列表
  38. function bizPlater_getRoleSet($bizPlater){
  39. $subSystem=intval(SUBSYS_PLAT_PCWEB);
  40. $roleList=pdo_fetchall("select r.* from base_roleuser ru
  41. left join base_role r on r.id=ru.roleid
  42. where ru.`userid`=:userid and r.subsystem=:subsystem and r.deleted=0;",array(
  43. ":userid"=>intval($bizPlater["id"]),
  44. ":subsystem"=>intval($subSystem),
  45. ));
  46. if(empty($roleList)) throw new GeneralException("","此用户没有被赋予任何角色,请联系平台超级管理员!");
  47. return $roleList;
  48. }
  49. //获取当前用户所属角色下可用的页面模块列表
  50. function bizPlater_getModuleSet($bizPlater){
  51. $subSystem = intval(SUBSYS_PLAT_PCWEB);
  52. $roleList = bizPlater_getRoleSet($bizPlater); //先确定当前用户有角色身份
  53. $moduleList = pdo_fetchall("select * from base_permission_object where `subsystem`=:subsystem and deleted=0
  54. order by `parentid` asc,`ranksn` asc;", array(":subsystem" => intval($subSystem)));
  55. if (empty($moduleList)) throw new GeneralException("", "竟然没有配置任何模块,请联系平台超级管理员!");
  56. $tmpModuleSet = array();
  57. foreach ($moduleList as $module) {
  58. $module["AAA_allowed"] = false; //默认都不可用,将来可根据模块本身的配置进行预设
  59. $tmpModuleSet[$module["id"]] = $module;
  60. }
  61. foreach ($roleList as $role) {
  62. if (trim($role["role_code"]) == "SuperAdmin") { //超管一票允许
  63. foreach ($tmpModuleSet as $key => &$moduleA) $moduleA["AAA_allowed"] = true;
  64. break;
  65. }
  66. $roleModIdSet = pdo_fetchall("select bpo.id as id from base_role_permission brp
  67. left join base_permission_object bpo on bpo.id=brp.objectid
  68. where bpo.deleted=0 and brp.`roleid`=:roleid and brp.`permission_run`='1' and bpo.id>0;", array(":roleid" => $role["id"]));
  69. foreach ($roleModIdSet as $roleModuleId) {
  70. $tmpModuleSet[$roleModuleId["id"]]["AAA_allowed"] = true;
  71. }
  72. }
  73. $forendSet = array(
  74. "navIcon" => array(),
  75. "states" => array(),
  76. "mainRoleName"=>$roleList[0]["role_name"],
  77. "undoList"=>bizPlater_undoList(),
  78. );
  79. $orderSN = 0;
  80. foreach ($tmpModuleSet as $key => $moduleB) {
  81. if ($moduleB["AAA_allowed"] == true && intval($moduleB["parentid"]) == 0) {
  82. array_push($forendSet["navIcon"],array(
  83. "id_id" => $moduleB["id"],
  84. "id" => $orderSN++, "name" => $moduleB["obj_name"],
  85. "icon" => $moduleB["obj_icon"], "dda" => array(),
  86. "alink" => $moduleB["obj_attach"]
  87. )
  88. );
  89. }
  90. }
  91. foreach ($forendSet["navIcon"] as &$topModule) {
  92. $orderSN = 0;
  93. foreach ($tmpModuleSet as $key => $subModule) {
  94. if ($subModule["AAA_allowed"] == true && intval($subModule["parentid"]) == $topModule["id_id"]) {
  95. array_push($topModule["dda"], array(
  96. "name" => $subModule["obj_name"], "alink" => $subModule["obj_attach"]
  97. ));
  98. array_push($forendSet["states"], array(
  99. "name" => $subModule["obj_name"], "alink" => $subModule["obj_attach"]
  100. ));
  101. }
  102. }
  103. unset($topModule["id_id"]);
  104. }
  105. return $forendSet;
  106. }
  107. //核查当前用户是否对某个模块具有权限
  108. function bizPlater_verifyPermisson($bizPlater,$objCatalog,$arrObjCodes){// 就像外国名字一样 祖先姓-父辈姓-...-自己的姓
  109. $subSystem=intval(SUBSYS_PLAT_PCWEB);
  110. $roleList=bizPlater_getRoleSet($bizPlater);
  111. if(empty($arrObjCodes) || !is_array($arrObjCodes) || count($arrObjCodes)<=0)
  112. throw new GeneralException("","授权目标对象的arrObjCodes集合不能为空!");
  113. $allowed=false;
  114. foreach($arrObjCodes as $objCode){
  115. $allowed=false;
  116. foreach($roleList as $role){
  117. $isSysRole=(intval($role["issysrole"])>0);//是否系统内建角色,不可修改/删除;
  118. switch(trim($role["role_code"])){
  119. case "SuperAdmin":
  120. return true;//一票允许 return true; 熔断直返
  121. break;
  122. default:
  123. $roleModIdSet = pdo_fetch("select bpo.id as id from base_role_permission brp
  124. inner join base_permission_object bpo on bpo.id=brp.objectid and bpo.`obj_code`=:obj_code
  125. where brp.`roleid`=:roleid and brp.`permission_run`='1';",
  126. array(":roleid" => $role["id"], ":obj_code" => trim($objCode))
  127. );
  128. if(!empty($roleModIdSet)) $allowed=true;
  129. break;
  130. }
  131. if($allowed) break;//已获取权限,则不再遍历其他角色
  132. }
  133. //从上到下,【任一级别】模块【没有】【任何角色】权限,则中止向后遍历,直接抛出无权限 熔断退出
  134. if(empty($allowed)) throw new GeneralException("","此用户没有当前页面的操作权限!");
  135. }
  136. if(empty($allowed)) throw new GeneralException("","此用户没有当前页面的操作权限!");
  137. return $allowed;
  138. }
  139. /**********************验证验权角色权限相关逻辑**************************************/
  140. function bizbase_AAAEntityHandle($subSystem, $handleMode, $baseUser, $ajaxdata, $GPC){
  141. switch($handleMode){
  142. case "fetchPlatUserList":
  143. $sqlTemp="";
  144. $sqlTemp.=" select bu.id,bu.login_name,bu.mobile,br.id as roleid,br.role_name";
  145. $sqlTemp.=" from base_user bu ";
  146. $sqlTemp.=" left join base_roleuser bru on bru.userid=bu.id ";
  147. $sqlTemp.=" left join base_role br on br.id=bru.roleid ";
  148. $sqlTemp.=" where bu.`deleted`=0 and bu.subsystem=" . intval($subSystem);
  149. $backdata = pdo_fetchall($sqlTemp);
  150. return $backdata;
  151. break;
  152. case "resetPlatUserPwd":
  153. case "resetPlatUserSelfPwd":
  154. if($handleMode=="resetPlatUserPwd"){
  155. $userid = isset($ajaxdata["userid"]) ? $ajaxdata["userid"] : $GPC["userid"];
  156. $baseUser = pdo_fetch("select * from base_user where id=".intval($userid));
  157. if(empty($baseUser)) throw new GeneralException("","没有定位到此id对应的用户记录!");
  158. }else if($handleMode=="resetPlatUserSelfPwd"){
  159. }
  160. $newPasswd = isset($ajaxdata["newPasswd"]) ? $ajaxdata["newPasswd"] : $GPC["newPadsswd"];
  161. if (mb_strlen(trim($newPasswd)) <= 0) // && !preg_match("/^.*[a-z].*[A-Z].*\d.*$/",trim($newPasswd)))
  162. throw new GeneralException("","新密码长度不能为空!");
  163. $backdata = pdo_query("update base_user set login_pwd=:login_pwd,salt=:salt where id=:id;",array(
  164. ":id"=>$baseUser["id"],
  165. ":login_pwd"=> bizPlater_cryptLoginPwd($newPasswd),
  166. ":salt"=>random(8),//重置盐
  167. ));
  168. return $backdata;
  169. break;
  170. case "upsertPlatRoleUser":
  171. $roleId = isset($ajaxdata["roleId"]) ? $ajaxdata["roleId"] : $GPC["roleId"];
  172. $roleInfo=pdo_fetch("select * from base_role where id=".intval($roleId));
  173. if(empty($roleInfo)) throw new GeneralException("","没有定位到角色记录!");
  174. $bizData = isset($ajaxdata["bizData"]) ? $ajaxdata["bizData"] : $GPC["bizData"];
  175. if (empty($bizData)) throw new GeneralException("", "没有传递必要的参数bizData");
  176. $saveData["login_name"]=trim($bizData["loginName"]);
  177. if (empty($saveData["login_name"])) throw new GeneralException("", "登录号不能为空");
  178. if(!empty(trim($bizData["loginPwd"]))){
  179. $saveData["login_pwd"]=bizPlater_cryptLoginPwd(trim($bizData["loginPwd"]));
  180. }
  181. $saveData["remark"]="[" . date("Y-m-d H:i:s", time()) . "] 更新 ".trim($bizData["remark"])." \n";
  182. $id=$bizData["id"];
  183. if(intval($id)<=0){
  184. $hasUsed=pdo_fetch("select * from base_user where deleted=0 and subsystem=:subsystem and login_name=:login_name;",array(
  185. ":subsystem"=>SUBSYS_PLAT_PCWEB,
  186. ":login_name"=>$saveData["login_name"],
  187. ));
  188. if(!empty($hasUsed)) throw new GeneralException("loginNameUsed","登录号已被使用,请重新换一个吧");
  189. $sqlParam=array();
  190. $sqlParam[":nowtime"]=time();
  191. $sqlParam[":subsystem"]=SUBSYS_PLAT_PCWEB;
  192. $sqlParam[":login_name"]=$saveData["login_name"];
  193. $sqlParam[":remark"]=$saveData["remark"];
  194. $sqlParam[":salt"]=random(8);
  195. $sqlTemp="";
  196. $sqlTemp.=" insert into base_user set createtime=:nowtime";
  197. $sqlTemp.=" ,subsystem=:subsystem,login_name=:login_name,remark=:remark,salt=:salt ";
  198. if(!empty($saveData["login_pwd"])){
  199. $sqlParam[":login_pwd"]=$saveData["login_pwd"];
  200. $sqlTemp.=" ,login_pwd=:login_pwd";
  201. }
  202. $sqlTemp.=" ;";
  203. $sqlTemp.=" set @handle_id=0; ";
  204. $sqlParam[":roleid"]=$roleId;
  205. $sqlTemp.=" select @handle_id:=id from base_roleuser";
  206. $sqlTemp.=" where `roleid`=:roleid and userid=LAST_INSERT_ID(); ";
  207. $sqlTemp.=" insert into base_roleuser(`roleid`, userid)";
  208. $sqlTemp.=" select :roleid, LAST_INSERT_ID() ";
  209. $sqlTemp.=" from dual where ifnull(@handle_id,0)=0 ;";
  210. $backdata = pdo_query3($sqlTemp, $sqlParam);
  211. return $backdata;
  212. }else{
  213. $userInfo=pdo_fetch("select * from base_user where id=".intval($id));
  214. if(empty($userInfo)) throw new GeneralException("","没有定位到登录账号记录!");
  215. if(intval($userInfo["subsystem"])!=SUBSYS_PLAT_PCWEB) throw new GeneralException("","登录账号记录不是平台账号!");
  216. $hasUseds=pdo_fetchall("select * from base_user where deleted=0 and subsystem=:subsystem and login_name=:login_name;",array(
  217. ":subsystem"=>SUBSYS_PLAT_PCWEB,
  218. ":login_name"=>$saveData["login_name"],
  219. ));
  220. foreach($hasUseds as $item){
  221. if(intval($item["id"])!=intval($userInfo["id"])) throw new GeneralException("loginNameUsed","登录号已被使用,请重新换一个吧");
  222. }
  223. $sqlParam=array();
  224. $sqlParam[":userid"]=$id;
  225. $sqlParam[":nowtime"]=time();
  226. $sqlParam[":login_name"]=$saveData["login_name"];
  227. $sqlParam[":remark"]=$saveData["remark"];
  228. $sqlTemp="";
  229. $sqlTemp.=" update base_user set updatetime=:nowtime,login_name=:login_name,remark=concat(:remark,ifnull(remark,'')) ";
  230. if(!empty($saveData["login_pwd"])){
  231. $sqlParam[":login_pwd"]=$saveData["login_pwd"];
  232. $sqlParam[":salt"]=random(8);
  233. $sqlTemp.=" ,login_pwd=:login_pwd,salt=:salt";
  234. }
  235. $sqlTemp.=" where id=:userid;";
  236. $sqlTemp.=" set @handle_id=0; ";
  237. $sqlParam[":roleid"]=$roleId;
  238. $sqlTemp.=" select @handle_id:=id from base_roleuser";
  239. $sqlTemp.=" where `roleid`=:roleid and userid=:userid; ";
  240. $sqlTemp.=" insert into base_roleuser(`roleid`, userid)";
  241. $sqlTemp.=" select :roleid, :userid";
  242. $sqlTemp.=" from dual where ifnull(@handle_id,0)=0 ;";
  243. $backdata = pdo_query3($sqlTemp, $sqlParam);
  244. return $backdata;
  245. }
  246. break;
  247. case "removePlatRoleUser":
  248. $userId = isset($ajaxdata["userId"]) ? $ajaxdata["userId"] : $GPC["userId"];
  249. $userInfo=pdo_fetch("select * from base_user where id=".intval($userId));
  250. if(empty($userInfo)) throw new GeneralException("","没有定位到登录账号记录!");
  251. if(intval($userInfo["subsystem"])!=SUBSYS_PLAT_PCWEB) throw new GeneralException("","登录账号记录不是平台账号!");
  252. if(intval($userInfo["deleted"])!=0) throw new GeneralException("","登录账号记录已被删除!");
  253. $reason = isset($ajaxdata["reason"]) ? $ajaxdata["reason"] : $GPC["reason"];
  254. $sqlParam=array();
  255. $sqlParam[":userid"]=$userId;
  256. $sqlParam[":nowtime"]=time();
  257. $sqlParam[":remark"]="[" . date("Y-m-d H:i:s", time()) . "] 删除 $reason \n";
  258. $sqlTemp="";
  259. $sqlTemp.=" update base_user set updatetime=:nowtime";
  260. $sqlTemp.=" ,deleted=1,remark=concat(:remark,ifnull(remark,'')) ";
  261. $sqlTemp.=" where id=:userid;";
  262. $sqlTemp.=" delete from base_roleuser where userid=:userid; ";
  263. $backdata = pdo_query3($sqlTemp, $sqlParam);
  264. return $backdata;
  265. break;
  266. default:
  267. throw new GeneralException("","不支持的handleMode!");
  268. }
  269. }
  270. function bizPlater_undoList(){
  271. $backdata=array();
  272. $backdata["recruit_waitaudit"]=pdo_fetchcolumn("select count(*) from biz_trader_recruit where deleted=0 and `status`=1");
  273. $backdata["recruit_waitaudit"]=intval($backdata["recruit_waitaudit"])<=0?null:intval($backdata["recruit_waitaudit"]);
  274. $backdata["suggestion_unsettled"]=pdo_fetchcolumn("select count(*) from biz_interaction where deleted=0 and biz_catalog<=1 and `status`<3 ");
  275. $backdata["suggestion_unsettled"]=intval($backdata["suggestion_unsettled"])<=0?null:intval($backdata["suggestion_unsettled"]);
  276. $backdata["complaint_unsettled"]=pdo_fetchcolumn("select count(*) from biz_interaction where deleted=0 and biz_catalog>=2 and `status`<3 ");
  277. $backdata["complaint_unsettled"]=intval($backdata["complaint_unsettled"])<=0?null:intval($backdata["complaint_unsettled"]);
  278. $backdata["tdwk_overtimepay"]=intval(pdo_fetchcolumn("select count(*) from biz_todowork tdwk where tdwk.deleted=0 and (tdwk.`status`=4 and ".time()."-ifnull(tdwk.worked_finishtime,0)>24*3600)"));
  279. $backdata["tdwk_denypay"]=intval(pdo_fetchcolumn("select count(*) from biz_todowork tdwk where tdwk.deleted=0 and (tdwk.`status`=-5)"));
  280. $backdata["tdwk_waitpay"]=$backdata["tdwk_overtimepay"]+$backdata["tdwk_denypay"];
  281. if($backdata["tdwk_waitpay"]<=0) $backdata["tdwk_waitpay"]=null;
  282. if($backdata["tdwk_overtimepay"]<=0) $backdata["tdwk_overtimepay"]=null;
  283. if($backdata["tdwk_denypay"]<=0) $backdata["tdwk_denypay"]=null;
  284. $backdata["activityorder_unreaded"]=intval(pdo_fetchcolumn("select count(*) from biz_market_activity_order where deleted=0 and plater_readed=0;"));
  285. if($backdata["activityorder_unreaded"]<=0) $backdata["activityorder_unreaded"]=null;
  286. $backdata["tdupgrade_unaudit"]=intval(pdo_fetchcolumn("select count(*) from biz_trader where deleted=0 and catalog=0 and certif_confirmed=1 and bizlicense_pic<>'';"));
  287. if($backdata["tdupgrade_unaudit"]<=0) $backdata["tdupgrade_unaudit"]=null;
  288. $backdata["tdupgrade_unaudit_gesture"]=intval(pdo_fetchcolumn("select count(*) from biz_trader where deleted=0 and (lawer_idcard != '' and ((catalog = '0' and (certif_confirmed = '0' or (certif_confirmed = '1' && company_idcard !=''))) or (catalog = '1' and certif_confirmed = '0')));"));
  289. if($backdata["tdupgrade_unaudit_gesture"]<=0) $backdata["tdupgrade_unaudit_gesture"]=null;
  290. return $backdata;
  291. }