admin.php 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316
  1. <?php
  2. /**
  3. * 权限管理
  4. *
  5. *
  6. *
  7. ***/
  8. defined('InShopNC') or exit('Access Invalid!');
  9. class adminControl extends SystemControl{
  10. private $links = array(
  11. array('url'=>'act=admin&op=admin','lang'=>'limit_admin'),
  12. array('url'=>'act=admin&op=admin_add','lang'=>'admin_add_limit_admin'),
  13. array('url'=>'act=admin&op=gadmin','lang'=>'limit_gadmin'),
  14. array('url'=>'act=admin&op=gadmin_add','lang'=>'admin_add_limit_gadmin'),
  15. );
  16. public function __construct(){
  17. parent::__construct();
  18. Language::read('admin');
  19. }
  20. /**
  21. * 管理员列表
  22. */
  23. public function adminOp(){
  24. $model = Model();
  25. if (chksubmit()){
  26. //ID为1的会员不允许删除
  27. if (@in_array(1,$_POST['del_id'])){
  28. showMessage(L('admin_index_not_allow_del'));
  29. }
  30. if (!empty($_POST['del_id'])){
  31. if (is_array($_POST['del_id'])){
  32. foreach ($_POST['del_id'] as $k => $v){
  33. $model->table('admin')->where(array('admin_id'=>intval($v)))->delete();
  34. }
  35. }
  36. $this->log(L('nc_delete,limit_admin'),1);
  37. showMessage(L('nc_common_del_succ'));
  38. }else {
  39. showMessage(L('nc_common_del_succ'));
  40. }
  41. }
  42. $admin_list = $model->table('admin,gadmin')->join('left join')->on('gadmin.gid=admin.admin_gid')->page(10)->select();
  43. Tpl::output('admin_list',$admin_list);
  44. Tpl::output('page',$model->showpage());
  45. Tpl::output('top_link',$this->sublink($this->links,'admin'));
  46. Tpl::showpage('admin.index');
  47. }
  48. /**
  49. * 管理员删除
  50. */
  51. public function admin_delOp(){
  52. if (!empty($_GET['admin_id'])){
  53. if ($_GET['admin_id'] == 1){
  54. showMessage(L('nc_common_save_fail'));
  55. }
  56. Model()->table('admin')->where(array('admin_id'=>intval($_GET['admin_id'])))->delete();
  57. $this->log(L('nc_delete,limit_admin').'[ID:'.intval($_GET['admin_id']).']',1);
  58. showMessage(L('nc_common_del_succ'));
  59. }else {
  60. showMessage(L('nc_common_del_fail'));
  61. }
  62. }
  63. /**
  64. * 管理员添加
  65. */
  66. public function admin_addOp(){
  67. if (chksubmit()){
  68. $limit_str = '';
  69. $model_admin = Model('admin');
  70. $param['admin_name'] = $_POST['admin_name'];
  71. $param['admin_gid'] = $_POST['gid'];
  72. $param['admin_password'] = md5($_POST['admin_password']);
  73. $rs = $model_admin->addAdmin($param);
  74. if ($rs){
  75. $this->log(L('nc_add,limit_admin').'['.$_POST['admin_name'].']',1);
  76. showMessage(L('nc_common_save_succ'),'index.php?act=admin&op=admin');
  77. }else {
  78. showMessage(L('nc_common_save_fail'));
  79. }
  80. }
  81. //得到权限组
  82. $gadmin = Model('gadmin')->field('gname,gid')->select();
  83. Tpl::output('gadmin',$gadmin);
  84. Tpl::output('top_link',$this->sublink($this->links,'admin_add'));
  85. Tpl::output('limit',$this->permission());
  86. Tpl::showpage('admin.add');
  87. }
  88. /**
  89. * 设置权限组权限
  90. */
  91. public function gadmin_setOp(){
  92. $model = Model('gadmin');
  93. $gid = intval($_GET['gid']);
  94. $ginfo = $model->getby_gid($gid);
  95. if (empty($ginfo)){
  96. showMessage(L('admin_set_admin_not_exists'));
  97. }
  98. if (chksubmit()){
  99. $limit_str = '';
  100. if (is_array($_POST['permission'])){
  101. $limit_str = implode('|',$_POST['permission']);
  102. }
  103. $limit_str = encrypt($limit_str,MD5_KEY.md5($_POST['gname']));
  104. $data['limits'] = $limit_str;
  105. $data['gname'] = $_POST['gname'];
  106. $update = $model->where(array('gid'=>$gid))->update($data);
  107. if ($update){
  108. $this->log(L('nc_edit,limit_gadmin').'['.$_POST['gname'].']',1);
  109. showMessage(L('nc_common_save_succ'),'index.php?act=admin&op=gadmin');
  110. }else {
  111. showMessage(L('nc_common_save_succ'));
  112. }
  113. }
  114. //解析已有权限
  115. $hlimit = decrypt($ginfo['limits'],MD5_KEY.md5($ginfo['gname']));
  116. $ginfo['limits'] = explode('|',$hlimit);
  117. Tpl::output('ginfo',$ginfo);
  118. Tpl::output('limit',$this->permission());
  119. Tpl::output('top_link',$this->sublink($this->links,'gadmin'));
  120. Tpl::showpage('gadmin.set');
  121. }
  122. /**
  123. * ajax操作
  124. */
  125. public function ajaxOp(){
  126. switch ($_GET['branch']){
  127. //管理人员名称验证
  128. case 'check_admin_name':
  129. $model_admin = Model('admin');
  130. $condition['admin_name'] = $_GET['admin_name'];
  131. $list = $model_admin->infoAdmin($condition);
  132. if (!empty($list)){
  133. exit('false');
  134. }else {
  135. exit('true');
  136. }
  137. break;
  138. //权限组名称验证
  139. case 'check_gadmin_name':
  140. $condition = array();
  141. if (is_numeric($_GET['gid'])){
  142. $condition['gid'] = array('neq',intval($_GET['gid']));
  143. }
  144. $condition['gname'] = $_GET['gname'];
  145. $info = Model('gadmin')->where($condition)->find();
  146. if (!empty($info)){
  147. exit('false');
  148. }else {
  149. exit('true');
  150. }
  151. break;
  152. }
  153. }
  154. /**
  155. * 设置管理员权限
  156. */
  157. public function admin_editOp(){
  158. if (chksubmit()){
  159. //没有更改密码
  160. if ($_POST['new_pw'] != ''){
  161. $data['admin_password'] = md5($_POST['new_pw']);
  162. }
  163. $data['admin_id'] = intval($_GET['admin_id']);
  164. $data['admin_gid'] = intval($_POST['gid']);
  165. //查询管理员信息
  166. $admin_model = Model('admin');
  167. $result = $admin_model->updateAdmin($data);
  168. if ($result){
  169. $this->log(L('nc_edit,limit_admin').'[ID:'.intval($_GET['admin_id']).']',1);
  170. showMessage(Language::get('admin_edit_success'),'index.php?act=admin&op=admin');
  171. }else{
  172. showMessage(Language::get('admin_edit_fail'),'index.php?act=admin&op=admin');
  173. }
  174. }else{
  175. //查询用户信息
  176. $admin_model = Model('admin');
  177. $admininfo = $admin_model->getOneAdmin(intval($_GET['admin_id']));
  178. if (!is_array($admininfo) || count($admininfo)<=0){
  179. showMessage(Language::get('admin_edit_admin_error'),'index.php?act=admin&op=admin');
  180. }
  181. Tpl::output('admininfo',$admininfo);
  182. Tpl::output('top_link',$this->sublink($this->links,'admin'));
  183. //得到权限组
  184. $gadmin = Model('gadmin')->field('gname,gid')->select();
  185. Tpl::output('gadmin',$gadmin);
  186. Tpl::showpage('admin.edit');
  187. }
  188. }
  189. /**
  190. * 取得所有权限项
  191. *
  192. * @return array
  193. */
  194. private function permission() {
  195. Language::read('common');
  196. $lang = Language::getLangContent();
  197. $limit = require(BASE_PATH.'/include/limit.php');
  198. if (is_array($limit)){
  199. foreach ($limit as $k=>$v) {
  200. if (is_array($v['child'])){
  201. $tmp = array();
  202. foreach ($v['child'] as $key => $value) {
  203. $act = (!empty($value['act'])) ? $value['act'] : $v['act'];
  204. if (strpos($act,'|') == false){//act参数不带|
  205. $limit[$k]['child'][$key]['op'] = rtrim($act.'.'.str_replace('|','|'.$act.'.',$value['op']),'.');
  206. }else{//act参数带|
  207. $tmp_str = '';
  208. if (empty($value['op'])){
  209. $limit[$k]['child'][$key]['op'] = $act;
  210. }elseif (strpos($value['op'],'|') == false){//op参数不带|
  211. foreach (explode('|',$act) as $v1) {
  212. $tmp_str .= "$v1.{$value['op']}|";
  213. }
  214. $limit[$k]['child'][$key]['op'] = rtrim($tmp_str,'|');
  215. }elseif (strpos($value['op'],'|') != false && strpos($act,'|') != false){//op,act都带|,交差权限
  216. foreach (explode('|',$act) as $v1) {
  217. foreach (explode('|',$value['op']) as $v2) {
  218. $tmp_str .= "$v1.$v2|";
  219. }
  220. }
  221. $limit[$k]['child'][$key]['op'] = rtrim($tmp_str,'|');
  222. }
  223. }
  224. }
  225. }
  226. }
  227. return $limit;
  228. }else{
  229. return array();
  230. }
  231. }
  232. /**
  233. * 权限组
  234. */
  235. public function gadminOp(){
  236. $model = Model('gadmin');
  237. if (chksubmit()){
  238. if (@in_array(1,$_POST['del_id'])){
  239. showMessage(L('admin_index_not_allow_del'));
  240. }
  241. if (!empty($_POST['del_id'])){
  242. if (is_array($_POST['del_id'])){
  243. foreach ($_POST['del_id'] as $k => $v){
  244. $model->where(array('gid'=>intval($v)))->delete();
  245. }
  246. }
  247. $this->log(L('nc_delete,limit_gadmin').'[ID:'.implode(',',$_POST['del_id']).']',1);
  248. showMessage(L('nc_common_del_succ'));
  249. }else {
  250. showMessage(L('nc_common_del_fail'));
  251. }
  252. }
  253. $list = $model->page(10)->select();
  254. Tpl::output('list',$list);
  255. Tpl::output('page',$model->showpage());
  256. Tpl::output('top_link',$this->sublink($this->links,'gadmin'));
  257. Tpl::showpage('gadmin.index');
  258. }
  259. /**
  260. * 添加权限组
  261. */
  262. public function gadmin_addOp(){
  263. if (chksubmit()){
  264. $limit_str = '';
  265. $model = Model('gadmin');
  266. if (is_array($_POST['permission'])){
  267. $limit_str = implode('|',$_POST['permission']);
  268. }
  269. $data['limits'] = encrypt($limit_str,MD5_KEY.md5($_POST['gname']));
  270. $data['gname'] = $_POST['gname'];
  271. if ($model->insert($data)){
  272. $this->log(L('nc_add,limit_gadmin').'['.$_POST['gname'].']',1);
  273. showMessage(L('nc_common_save_succ'),'index.php?act=admin&op=gadmin');
  274. }else {
  275. showMessage(L('nc_common_save_fail'));
  276. }
  277. }
  278. Tpl::output('top_link',$this->sublink($this->links,'gadmin_add'));
  279. Tpl::output('limit',$this->permission());
  280. Tpl::showpage('gadmin.add');
  281. }
  282. /**
  283. * 组删除
  284. */
  285. public function gadmin_delOp(){
  286. if (is_numeric($_GET['gid'])){
  287. Model('gadmin')->where(array('gid'=>intval($_GET['gid'])))->delete();
  288. $this->log(L('nc_delete,limit_gadmin').'[ID'.intval($_GET['gid']).']',1);
  289. redirect();
  290. }else {
  291. showMessage(L('nc_common_op_fail'));
  292. }
  293. }
  294. }