ecshop 后台角色管理的一些BUG修复

一、角色名为空也能“添加”和“修改”角色,点击保存到数据库;增加判断语句修复,避免此问题。

二、管理员分派角色管理权限,无法正常显示使用;修复检查权限的语句解决此问题。

三、角色“添加”、“删除”、“编辑”操作无记录管理员操作日志问题,增加记录管理员操作日志语句解决此问题。

四、角色名相同也能“添加”、“修改”点击保存到数据库,增加判断语句修复,避免此问题。

第一个问题解决过程

1,admin/role.php,增加判断语句代码

/*------------------------------------------------------ */
//-- 添加角色的处理
/*------------------------------------------------------ */
elseif ($_REQUEST['act'] == 'insert')
{
	admin_priv('role_manage');//检查权限
    $act_list = @join(",", $_POST['action_code']);
	
/* 加入判断 */
    if (empty($_POST['user_name']))
    {
		sys_msg($_LANG['role_name_empty'], 1);
    }
    else
    {
		$sql = "INSERT INTO ".$ecs->table('role')." (role_name, action_list, role_describe) ".
           "VALUES ('".trim($_POST['user_name'])."','$act_list','".trim($_POST['role_describe'])."')";
		$db->query($sql);
		/* 记录管理员操作 */
		admin_log($_POST['user_name'], 'add', 'role');
    }

    /* 转入权限分配列表 */
    $new_id = $db->Insert_ID();

    /*添加链接*/

    $link[0]['text'] = $_LANG['admin_list_role'];
    $link[0]['href'] = 'role.php?act=list';

    sys_msg($_LANG['add'] . " " .$_POST['user_name'] . " " . $_LANG['action_succeed'],0, $link);

    /* 记录管理员操作 */
    admin_log($_POST['user_name'], 'add', 'role');
 }
/*------------------------------------------------------ */
//-- 更新角色信息
/*------------------------------------------------------ */
elseif ($_REQUEST['act'] == 'update')
{
    /* 更新管理员的权限 */
    $act_list = @join(",", $_POST['action_code']);
    $sql = "UPDATE " .$ecs->table('role'). " SET action_list = '$act_list', role_name = '".$_POST['user_name']."', role_describe = '".$_POST['role_describe']." ' ".
           "WHERE role_id = '$_POST[id]'";
    $db->query($sql);
	/* 加入判断 */
	if (empty($_POST['user_name']))
    {
		sys_msg($_LANG['role_name_empty'], 1);
    }
    else
    {
		$user_sql = "UPDATE " .$ecs->table('admin_user'). " SET action_list = '$act_list' ".
			   "WHERE role_id = '$_POST[id]'";
		$db->query($user_sql);
		/* 记录管理员操作 */
		admin_log($_POST['user_name'], 'edit', 'role');
    }
    /* 提示信息 */
    $link[] = array('text' => $_LANG['back_admin_list'], 'href'=>'role.php?act=list');
    sys_msg($_LANG['edit'] . " " . $_POST['user_name'] . " " . $_LANG['action_succeed'], 0, $link);
}

2,languages/zh_cn/admin/role.php,添加语言项代码

$_LANG['role_name_empty'] = '角色名不能为空!';

3,admin/templates/role_info.htm,去掉角色描述必填*提示符,这个随便你,想去掉就去 ,不想就不用管。

<textarea name="role_describe" cols="31" rows="6">{$user.role_describe|escape}</textarea>
{$lang.require_field}

修改为

<textarea name="role_describe" cols="31" rows="6">{$user.role_describe|escape}</textarea>

第二个问题解决过程

admin/role.php,修改检查权限语句

admin_priv('admin_manage');

修改为

admin_priv('role_manage');

第三个问题解决过程

角色添加和编辑的记录在问题一中已经修复过,以下只需增加记录管理员删除操作日志语句代码

admin/role.php,增加删除记录管理员操作日志语句

搜索

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

在搜索到的代码下一行加入以下代码

/* 获得角色名 */
$role_name = $db->getOne('SELECT role_name FROM '.$ecs->table('role')." WHERE role_id='$_GET[id]'");

再搜索

$url = 'role.php?act=query&' . str_replace('act=remove', '', $_SERVER['QUERY_STRING']);

在搜索到的代码上一行加入以下代码,是上一行哦。

/* 记录管理员操作 */
admin_log(addslashes($role_name), 'remove', 'role');

languages/zh_cn/admin/log_action.php,添加语言项代码

$_LANG['log_action']['role'] = '角色';

第四个问题解决过程

1,admin/role.php,增加判断语句代码

搜索如下代码,共有2段;

$act_list = @join(",", $_POST['action_code']);

在搜索到的第一段代码上一行加入以下代码

/* 判断角色名是否已经存在 */
if (!empty($_POST['user_name']))
{
	$is_only = $exc->is_only('role_name', stripslashes($_POST['user_name']));
	if (!$is_only)
	{
		sys_msg(sprintf($_LANG['role_name_exist'], stripslashes($_POST['user_name'])), 1);
	}
}

再搜索如下代码:

elseif ($_REQUEST['act'] == 'update')
{

在下一行,加入以下代码

/* 变量初始化 */
$role_id    = !empty($_REQUEST['id'])        ? intval($_REQUEST['id'])      : 0;
$role_name  = !empty($_REQUEST['user_name']) ? trim($_REQUEST['user_name']) : '';

再搜索如下代码:

$sql = "UPDATE " .$ecs->table('role'). " SET action_list = '$act_list', role_name = '".$_POST['user_name']."', role_describe = '".$_POST['role_describe']." ' ".
	   "WHERE role_id = '$_POST[id]'";
$db->query($sql);

将搜索到的代码修改为如下代码

/* 判断角色名是否已经存在 */
if (!empty($role_name))
{
	$is_only = $exc->num('role_name', $role_name, $role_id);
	if ($is_only == 1)
	{
		sys_msg(sprintf($_LANG['role_name_exist'], stripslashes($role_name)), 1);
	}
	else
	{
		$sql = "UPDATE " .$ecs->table('role'). " SET action_list = '$act_list', role_name = '".$_POST['user_name']."', role_describe = '".$_POST['role_describe']." ' ".
			   "WHERE role_id = '$_POST[id]'";
		$db->query($sql);
	}
}

2,languages/zh_cn/admin/role.php,添加语言项代码

$_LANG['role_name_exist'] = '该角色名已经存在!';

打包提供我们修改好的文件给大家
[fo_hide]ECShop2.7.3后台角色管理错误修改好的文件.rar 密码: c2t3[/fo_hide]

阅读剩余
THE END