Server : nginx/1.22.1
System : Linux iZwz9daxib3w3i063fw434Z 3.10.0-1127.19.1.el7.x86_64 #1 SMP Tue Aug 25 17:23:54 UTC 2020 x86_64
User : www ( 1000)
PHP Version : 7.2.33
Disable Function : passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv
Directory :  /www/wwwroot/www.jkmold.com/phpcms/modules/admin/
Upload File :
Current Directory [ Writeable ] Root Directory [ Writeable ]


Current File : /www/wwwroot/www.jkmold.com/phpcms/modules/admin/role.php
<?php

defined('IN_PHPCMS') or exit('No permission resources.');

pc_base::load_app_class('admin','admin',0);

pc_base::load_sys_class('form', '', 0);

class role extends admin {

	private $db, $priv_db;

	function __construct() {

		parent::__construct();

		$this->db = pc_base::load_model('admin_role_model');

		$this->priv_db = pc_base::load_model('admin_role_priv_model');

		$this->op = pc_base::load_app_class('role_op');

	}

	

	/**

	 * 角色管理列表

	 */

	public function init() {

		$infos = $this->db->select($where = '', $data = '*', $limit = '', $order = 'listorder DESC, roleid DESC', $group = '');

		

		include $this->admin_tpl('role_list');

	}

	

	/**

	 * 添加角色

	 */

	public function add() {

		if(isset($_POST['dosubmit'])) {

			if(!is_array($_POST['info']) || empty($_POST['info']['rolename'])){

				showmessage(L('operation_failure'));

			}

			if($this->op->checkname($_POST['info']['rolename'])){

				showmessage(L('role_duplicate'));

			}

			$insert_id = $this->db->insert($_POST['info'],true);

			$this->_cache();

			if($insert_id){

				showmessage(L('operation_success'),'?m=admin&c=role&a=init');

			}

		} else {

			include $this->admin_tpl('role_add');

		}

		

	}

	

	/**

	 * 编辑角色

	 */

	public function edit() {

		if(isset($_POST['dosubmit'])) {

			$_POST['roleid'] = intval($_POST['roleid']);

			if(!is_array($_POST['info']) || empty($_POST['info']['rolename'])){

				showmessage(L('operation_failure'));

			}

			$this->db->update($_POST['info'],array('roleid'=>$_POST['roleid']));

			$this->_cache();

			showmessage(L('operation_success'),'?m=admin&c=role');

		} else {					

			$info = $this->db->get_one(array('roleid'=>$_GET['roleid']));

			extract($info);		

			include $this->admin_tpl('role_edit');		

		}

	}

	

	/**

	 * 删除角色

	 */

	public function delete() {

		$roleid = intval($_GET['roleid']);

		if($roleid == '1') showmessage(L('this_object_not_del'), HTTP_REFERER);

		$this->db->delete(array('roleid'=>$roleid));

		$this->priv_db->delete(array('roleid'=>$roleid));

		$this->_cache();

		showmessage(L('role_del_success'));

	}

	/**

	 * 更新角色排序

	 */

	public function listorder() {

		if(isset($_POST['dosubmit'])) {

			foreach($_POST['listorders'] as $roleid => $listorder) {

				$this->db->update(array('listorder'=>$listorder),array('roleid'=>$roleid));

			}

			showmessage(L('operation_success'));

		} else {

			showmessage(L('operation_failure'));

		}

	}

	

	/**

	 * 角色权限设置

	 */

	public function role_priv() {

		$this->menu_db = pc_base::load_model('menu_model');

		$siteid = $siteid ? $siteid : self::get_siteid(); 

		if(isset($_POST['dosubmit'])){

			if (is_array($_POST['menuid']) && count($_POST['menuid']) > 0) {

			

				$this->priv_db->delete(array('roleid'=>$_POST['roleid'],'siteid'=>$_POST['siteid']));

				$menuinfo = $this->menu_db->select('','`id`,`m`,`c`,`a`,`data`');

				foreach ($menuinfo as $_v) $menu_info[$_v[id]] = $_v;

				foreach($_POST['menuid'] as $menuid){

					$info = array();

					$info = $this->op->get_menuinfo(intval($menuid),$menu_info);

					$info['roleid'] = $_POST['roleid'];

					$info['siteid'] = $_POST['siteid'];

					$this->priv_db->insert($info);

				}

			} else {

				$this->priv_db->delete(array('roleid'=>$_POST['roleid'],'siteid'=>$_POST['siteid']));

			}

			$this->_cache();	

			showmessage(L('operation_success'), HTTP_REFERER);



		} else {

			$siteid = intval($_GET['siteid']);

			$roleid = intval($_GET['roleid']);

			if ($siteid) {

				$menu = pc_base::load_sys_class('tree');

				$menu->icon = array('│ ','├─ ','└─ ');

				$menu->nbsp = '&nbsp;&nbsp;&nbsp;';

				$result = $this->menu_db->select();

				$priv_data = $this->priv_db->select(); //获取权限表数据

				$modules = 'admin,system';

				foreach ($result as $n=>$t) {

					$result[$n]['cname'] = L($t['name'],'',$modules);

					$result[$n]['checked'] = ($this->op->is_checked($t,$_GET['roleid'],$siteid, $priv_data))? ' checked' : '';

					$result[$n]['level'] = $this->op->get_level($t['id'],$result);

					$result[$n]['parentid_node'] = ($t['parentid'])? ' class="child-of-node-'.$t['parentid'].'"' : '';

				}

				$str  = "<tr id='node-\$id' \$parentid_node>

							<td style='padding-left:30px;'>\$spacer<input type='checkbox' name='menuid[]' value='\$id' level='\$level' \$checked onclick='javascript:checknode(this);'> \$cname</td>

						</tr>";

			

				$menu->init($result);

				$categorys = $menu->get_tree(0, $str);

			}

			$show_header = true;

			$show_scroll = true;

			include $this->admin_tpl('role_priv');

		}

	}

	

	public function priv_setting() {

		$sites = pc_base::load_app_class('sites', 'admin');

		$sites_list = $sites->get_list();

		$roleid = intval($_GET['roleid']);

		include $this->admin_tpl('role_priv_setting');

		

	}



	/**

	 * 更新角色状态

	 */

	public function change_status(){

		$roleid = intval($_GET['roleid']);

		$disabled = intval($_GET['disabled']);

		$this->db->update(array('disabled'=>$disabled),array('roleid'=>$roleid));

		$this->_cache();

		showmessage(L('operation_success'),'?m=admin&c=role');

	}

	/**

	 * 成员管理

	 */

	public function member_manage() {

		$this->admin_db = pc_base::load_model('admin_model');

		$roleid = intval($_GET['roleid']);

		$roles = getcache('role','commons');

		$infos = $this->admin_db->select(array('roleid'=>$roleid));

		include $this->admin_tpl('admin_list');

	}

		

	/**

	 * 设置栏目权限

	 */

	public function setting_cat_priv() {

		$roleid = isset($_GET['roleid']) && intval($_GET['roleid']) ? intval($_GET['roleid']) : showmessage(L('illegal_parameters'), HTTP_REFERER);

		$op = isset($_GET['op']) && intval($_GET['op']) ? intval($_GET['op']) : '';

		switch ($op) {

			case 1:

			$siteid = isset($_GET['siteid']) && intval($_GET['siteid']) ? intval($_GET['siteid']) : showmessage(L('illegal_parameters'), HTTP_REFERER);

			pc_base::load_app_class('role_cat', '', 0);

			$category = role_cat::get_category($siteid);

			//获取角色当前权限设置

			$priv = role_cat::get_roleid($roleid, $siteid);

			//加载tree

			$tree = pc_base::load_sys_class('tree');

			$categorys = array();

			foreach ($category as $k=>$v) {

				if ($v['type'] == 1) {

					$v['disabled'] = 'disabled';

					$v['init_check'] = '';

					$v['add_check'] = '';

					$v['delete_check'] = '';

					$v['listorder_check'] = '';

					$v['push_check'] = '';

					$v['move_check'] = '';

				} else {

					$v['disabled'] = '';

					

					$v['add_check'] = isset($priv[$v['catid']]['add']) ? 'checked' : '';

					$v['delete_check'] = isset($priv[$v['catid']]['delete']) ? 'checked' : '';

					$v['listorder_check'] = isset($priv[$v['catid']]['listorder']) ? 'checked' : '';

					$v['push_check'] = isset($priv[$v['catid']]['push']) ? 'checked' : '';

					$v['move_check'] = isset($priv[$v['catid']]['remove']) ? 'checked' : '';

					$v['edit_check'] = isset($priv[$v['catid']]['edit']) ? 'checked' : '';

				}

				$v['init_check'] = isset($priv[$v['catid']]['init']) ? 'checked' : '';

				$category[$k] = $v;

			}

			$show_header = true;

			$str = "<tr>

					<td align='center'><input type='checkbox'  value='1' onclick='select_all(\$catid, this)' ></td>

				  <td>\$spacer\$catname</td>

				  <td align='center'><input type='checkbox' name='priv[\$catid][]' \$init_check  value='init' ></td>

				  <td align='center'><input type='checkbox' name='priv[\$catid][]' \$disabled \$add_check value='add' ></td>

				  <td align='center'><input type='checkbox' name='priv[\$catid][]' \$disabled \$edit_check value='edit' ></td>

				  <td align='center'><input type='checkbox' name='priv[\$catid][]' \$disabled \$delete_check  value='delete' ></td>

				  <td align='center'><input type='checkbox' name='priv[\$catid][]' \$disabled \$listorder_check value='listorder' ></td>

				  <td align='center'><input type='checkbox' name='priv[\$catid][]' \$disabled \$push_check value='push' ></td>

				  <td align='center'><input type='checkbox' name='priv[\$catid][]' \$disabled \$move_check value='remove' ></td>

			  </tr>";

			

			$tree->init($category);

			$categorys = $tree->get_tree(0, $str);

			include $this->admin_tpl('role_cat_priv_list');

		break;

		

		case 2:

			$siteid = isset($_GET['siteid']) && intval($_GET['siteid']) ? intval($_GET['siteid']) : showmessage(L('illegal_parameters'), HTTP_REFERER);

			pc_base::load_app_class('role_cat', '', 0);

			role_cat::updata_priv($roleid, $siteid, $_POST['priv']);

			showmessage(L('operation_success'),'?m=admin&c=role&a=init', '', 'edit');

			break;

		

		default:

			$sites = pc_base::load_app_class('sites', 'admin');

			$sites_list = $sites->get_list();

			include $this->admin_tpl('role_cat_priv');

		break;

		}

	}	

	/**

	 * 角色缓存

	 */

	private function _cache() {



		$infos = $this->db->select(array('disabled'=>'0'), $data = '`roleid`,`rolename`', '', 'roleid ASC');

		$role = array();

		foreach ($infos as $info){

			$role[$info['roleid']] = $info['rolename'];

		}

		$this->_cache_siteid($role);

		setcache('role', $role,'commons');

		return $infos;

	}

	

	/**

	 * 缓存站点数据

	 */

	private function _cache_siteid($role) {

		$sitelist = array();

		foreach($role as $n=>$r) {

			$sitelists = $this->priv_db->select(array('roleid'=>$n),'siteid', '', 'siteid');

			foreach($sitelists as $site) {

				foreach($site as $v){

					$sitelist[$n][] = intval($v);

				}

			}

		}

		if(is_array($sitelist)) {

			$sitelist = @array_map("array_unique", $sitelist);

			setcache('role_siteid', $sitelist,'commons');

		}								

		return $sitelist;

	}

	

}

?>