| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461 | <?phpnamespace Admin\Controller;/** * 权限管理 * @author   Devil * @blog     http://gong.gg/ * @version  0.0.1 * @datetime 2016-12-01T21:51:08+0800 */class PowerController extends CommonController{	/**	 * [_initialize 前置操作-继承公共前置方法]	 * @author   Devil	 * @blog     http://gong.gg/	 * @version  0.0.1	 * @datetime 2016-12-03T12:39:08+0800	 */	public function _initialize()	{		// 调用父类前置方法		parent::_initialize();		// 登录校验		$this->Is_Login();		// 权限校验		$this->Is_Power();	}	/**     * [Index 权限组列表]     * @author   Devil     * @blog     http://gong.gg/     * @version  0.0.1     * @datetime 2016-12-06T21:31:53+0800     */	public function Index()	{		// 获取权限列表		$m = M('Power');		$field = array('id', 'pid', 'name', 'control', 'action', 'sort', 'is_show', 'icon');		$list = $m->field($field)->where(array('pid'=>0))->order('sort')->select();		if(!empty($list))		{			foreach($list as $k=>$v)			{				$item =  $m->field($field)->where(array('pid'=>$v['id']))->order('sort')->select();				if(!empty($item))				{					$list[$k]['item'] = $item;				}			}		}		$this->assign('common_is_show_list', L('common_is_show_list'));		$this->assign('list', $list);		$this->display('Index');	}	/**	 * [PowerSave 权限添加/编辑]	 * @author   Devil	 * @blog     http://gong.gg/	 * @version  0.0.1	 * @datetime 2016-12-13T21:41:03+0800	 */	public function PowerSave()	{		// 是否ajax请求		if(!IS_AJAX)		{			$this->error(L('common_unauthorized_access'));		}		// id为空则表示是新增		$m = D('Power');		// 公共额外数据处理		$m->sort 	=	intval(I('sort'));		// 添加		if(empty($_POST['id']))		{			if($m->create($_POST, 1))			{				// 额外数据处理				$m->add_time	=	time();				$m->name 		=	I('name');				$m->control 	=	I('control');				$m->action 		=	I('action');				$m->icon 		=	I('icon');								// 写入数据库				if($m->add())				{					// 清除用户权限数据					PowerCacheDelete();					$this->ajaxReturn(L('common_operation_add_success'));				} else {					$this->ajaxReturn(L('common_operation_add_error'), -100);				}			}		} else {			// 编辑			if($m->create($_POST, 2))			{				// 额外数据处理				$m->name 		=	I('name');				$m->control 	=	I('control');				$m->action 		=	I('action');				$m->icon 		=	I('icon');				// 移除 id				unset($m->id);				// 更新数据库				if($m->where(array('id'=>I('id')))->save())				{					// 清除用户权限数据					PowerCacheDelete();					$this->ajaxReturn(L('common_operation_edit_success'));				} else {					$this->ajaxReturn(L('common_operation_edit_error'), -100);				}			}		}		$this->ajaxReturn($m->getError(), -1);	}	/**	 * [PowerDelete 权限删除]	 * @author   Devil	 * @blog     http://gong.gg/	 * @version  0.0.1	 * @datetime 2016-12-14T21:40:29+0800	 */	public function PowerDelete()	{		if(!IS_AJAX)		{			$this->error(L('common_unauthorized_access'));		}		$m = D('Power');		if($m->create($_POST, 5))		{			if($m->delete(I('id')))			{				// 清除用户权限数据				PowerCacheDelete();				$this->ajaxReturn(L('common_operation_delete_success'));			} else {				$this->ajaxReturn(L('common_operation_delete_error'), -100);			}		} else {			$this->ajaxReturn($m->getError(), -1);		}	}	/**	 * [Role 角色组列表]	 * @author   Devil	 * @blog     http://gong.gg/	 * @version  0.0.1	 * @datetime 2016-12-14T21:37:02+0800	 */	public function Role()	{		$m = M('Role');		$list = $m->field(array('id', 'name', 'is_enable', 'add_time'))->select();		if(!empty($list))		{			foreach($list as $k=>$v)			{				// 关联查询权限和角色数据				if($v['id'] == 1)				{					$list[$k]['item'] = M('Power')->select();				} else {					$list[$k]['item'] = $m->alias('r')->join('__ROLE_POWER__ AS rp ON rp.role_id = r.id')->join('__POWER__ AS p ON rp.power_id = p.id')->where(array('r.id'=>$v['id']))->field(array('p.id', 'p.name'))->select();				}			}		}		$this->assign('list', $list);		$this->display('Role');	}	/**	 * [RoleSaveInfo 角色组添加/编辑页面]	 * @author   Devil	 * @blog     http://gong.gg/	 * @version  0.0.1	 * @datetime 2016-12-14T21:37:02+0800	 */	public function RoleSaveInfo()	{		// 角色组		$role = M('Role')->field(array('id', 'name', 'is_enable'))->find(I('id'));		$role_id = isset($role['id']) ? $role['id'] : $this->admin['role_id'];		$power = array();		if($role_id > 0)		{			// 权限关联数据			$action = empty($_REQUEST['id']) ? array() : M('RolePower')->where(array('role_id'=>$role_id))->getField('power_id', true);			// 权限列表			$m = M('Power');			$power_field = array('id', 'name', 'is_show');			$power = $m->field($power_field)->where(array('pid'=>0))->order('sort')->select();			if(!empty($power))			{				foreach($power as $k=>$v)				{					// 是否有权限					$power[$k]['is_power'] = in_array($v['id'], $action) ? 'ok' : 'no';					// 获取子权限					$item =  $m->field($power_field)->where(array('pid'=>$v['id']))->order('sort')->select();					if(!empty($item))					{						foreach($item as $ks=>$vs)						{							$item[$ks]['is_power'] = in_array($vs['id'], $action) ? 'ok' : 'no';						}						$power[$k]['item'] = $item;					}				}			}		}		$this->assign('common_is_enable_list', L('common_is_enable_list'));		$this->assign('data', $role);		$this->assign('power', $power);		$this->display('RoleSaveInfo');	}	/**	 * [RoleSave 角色组添加/编辑]	 * @author   Devil	 * @blog     http://gong.gg/	 * @version  0.0.1	 * @datetime 2016-12-14T21:37:02+0800	 */	public function RoleSave()	{		// 是否ajax请求		if(!IS_AJAX)		{			$this->error(L('common_unauthorized_access'));		}		// 添加		if(empty($_POST['id']))		{			$this->RoleAdd();		// 编辑		} else {			if(I('id') == 1)			{				$this->error(L('common_do_not_operate'), -10);			} else {				$this->RoleEdit();			}		}	}	/**	 * [RoleAdd 角色添加]	 * @author   Devil	 * @blog     http://gong.gg/	 * @version  0.0.1	 * @datetime 2016-12-18T16:20:59+0800	 */	private function RoleAdd()	{		// 角色对象		$r = M('Role');		// 数据自动校验		if($r->create($_POST, 1))		{			// 开启事务			$r->startTrans();			// 角色添加			$role_data = array(					'name'		=>	I('name'),					'is_enable'	=>	I('is_enable'),					'add_time'	=>	time(),				);			$role_id = $r->add($role_data);			// 角色权限关联添加			$rp_state = true;			if(!empty($_POST['power_id']) && is_array($_POST['power_id']))			{				// 角色权限关联对象				$rp = M('RolePower');				foreach($_POST['power_id'] as $power_id)				{					if(!empty($power_id))					{						$rp_data = array(								'role_id'	=>	$role_id,								'power_id'	=>	$power_id,								'add_time'	=>	time(),							);						if(!$rp->add($rp_data))						{							$rp_state = false;							break;						}					}				}			}			if($role_id && $rp_state)			{				// 提交事务				$r->commit();				// 清除用户权限数据				PowerCacheDelete();				$this->ajaxReturn(L('common_operation_add_success'));			} else {				// 回滚事务				$r->rollback();				$this->ajaxReturn(L('common_operation_add_error'), -100);			}		} else {			$this->ajaxReturn($m->getError(), -1);		}	}	/**	 * [RoleEdit 角色和角色权限关联编辑]	 * @author   Devil	 * @blog     http://gong.gg/	 * @version  0.0.1	 * @datetime 2016-12-17T22:13:40+0800	 */	private function RoleEdit()	{		// 角色对象		$r = M('Role');		// 数据自动校验		if($r->create($_POST, 2))		{			// 开启事务			$r->startTrans();			// 角色数据更新			$role_data = array(					'name'		=>	I('name'),					'is_enable'	=>	I('is_enable'),				);			$r_state = ($r->where(array('id'=>I('id')))->save($role_data) !== false);			// 角色权限关联对象			$rp = M('RolePower');			// 角色id			$role_id = I('id');			// 权限关联数据删除			$rp_del_state = $rp->where(array('role_id'=>$role_id))->delete();			// 权限关联数据添加			$rp_state = true;			if(!empty($_POST['power_id']))			{				$power_id_list = explode(',', $_POST['power_id']);				foreach($power_id_list as $power_id)				{					if(!empty($power_id))					{						$rp_data = array(								'role_id'	=>	$role_id,								'power_id'	=>	$power_id,								'add_time'	=>	time(),							);						if(!$rp->add($rp_data))						{							$rp_state = false;							break;						}					}				}			}			if($r_state !== false && $rp_del_state !== false && $rp_state !== false)			{				// 提交事务				$r->commit();				// 清除用户权限数据				PowerCacheDelete();				$this->ajaxReturn(L('common_operation_edit_success'));			} else {				// 回滚事务				$r->rollback();				$this->ajaxReturn(L('common_operation_edit_error'), -100);			}		} else {			$this->ajaxReturn($m->getError(), -1);		}	}	/**	 * [RoleDelete 角色删除]	 * @author   Devil	 * @blog     http://gong.gg/	 * @version  0.0.1	 * @datetime 2016-12-15T11:03:30+0800	 */	public function RoleDelete()	{		// 是否ajax请求		if(!IS_AJAX)		{			$this->error(L('common_unauthorized_access'));		}		// 参数是否有误		if(empty($_POST['id']))		{			$this->ajaxReturn(L('common_param_error'), -1);		}		// 角色模型		$r = M('Role');		// 开启事务		$r->startTrans();		// 删除角色		$role_state = $r->delete(I('id'));		$rp_state = M('RolePower')->where(array('role_id'=>I('id')))->delete();		if($role_state !== false && $rp_state !== false)		{			// 提交事务			$r->commit();			// 清除用户权限数据			PowerCacheDelete();			$this->ajaxReturn(L('common_operation_delete_success'));		} else {			// 回滚事务			$r->rollback();			$this->ajaxReturn(L('common_operation_delete_error'), -100);		}	}}?>
 |