如果因为管理员离职将后台账号删除的话,那么管理员日志中将无法查看到该员工在职期间的操作记录,为解决这一问题,我的思路不必删除账号,只需将账号冻结,员工操作日志永久保留,这是一种比较合理的处理方式。
第一步:修改数据库,表ecs_admin_user增加一个字段status用来保存账号状态(1-正常,2-离职)。
ALTER TABLE ecs_admin_user ADD status SMALLINT( 5 ) UNSIGNED NOT NULL DEFAULT '1' COMMENT '账号状态';
第二步:修改相关语言文件,/languages/zh_cn/admin/privilege.php增加语言项。
$_LANG['login_freezing'] = '您输入的帐号被冻结,请联系公司网站负责人。';
$_LANG['select_status'] = '账号状态';
$_LANG['normal'] = '正常';
$_LANG['left'] = '离职';
第三步:修改/admin/privilege.php,增加账号状态检查。
1、$_REQUEST[‘act’] == 'signin'中添加代码:
if ($row)
{
// 检查是否为供货商的管理员 所属供货商是否有效
if (!empty($row['suppliers_id']))
{
$supplier_is_check = suppliers_list_info(' is_check = 1 AND suppliers_id = ' . $row['suppliers_id']);
if (empty($supplier_is_check))
{
sys_msg($_LANG['login_disable'], 1);
}
}
/** 添加代码开始 检查帐号是否被冻结 **/
if ($row['status'] == 2)
{
sys_msg($_LANG['login_freezing'], 1);
exit();
}
/** 添加代码结束 检查帐号是否被冻结 **/
// 登录成功
set_admin_session($row['user_id'], $row['user_name'], $row['action_list'], $row['last_login']);
$_SESSION['suppliers_id'] = $row['suppliers_id'];
}
2、文件末尾增加方法get_status_list,用来获取账号状态。
function get_status_list()
{
$list = array();
$sql_id = 'SELECT user_id '.
'FROM ' .$GLOBALS['ecs']->table('admin_user');
$list = $GLOBALS['db']->getAll($sql_id);
$sql_st = 'SELECT distinct status '.
'FROM ' .$GLOBALS['ecs']->table('admin_user');
$list = $GLOBALS['db']->getAll($sql_st);
return $list;
}
3、$_REQUEST[‘act’] == 'signin'中修改语句为:
/* 检查密码是否正确 */
$sql = "SELECT user_id, user_name, password, last_login, action_list, last_login, suppliers_id, status".
" FROM " . $ecs->table('admin_user') .
" WHERE user_name = '" . $_POST['username']. "' AND password = '" . md5($_POST['password']) . "'";
4、添加管理员方法$_REQUEST[‘act’] == 'add'将账号状态赋值到模板:
$smarty->assign('select_status', get_status_list());
5、编辑管理员方法$_REQUEST[‘act’] == 'edit'''将账号状态赋值到模板:
/* 如果被编辑的管理员拥有了all这个权限,将不能编辑 */
if ($priv_str != 'all')
{
$smarty->assign('select_role', get_role_list());
$smarty->assign('select_status', get_status_list()); //添加的代码
}
6、更新管理员信息方法$_REQUEST[‘act’] == ‘update’ || $_REQUEST[‘act’] == 'update_self''获取表单中提交的账号状态:
$admin_status = !empty($_REQUEST['status']) ? trim($_REQUEST['status']) : 1; //账号状态
//更新管理员信息
$sql = "UPDATE " .$ecs->table('admin_user'). " SET ".
"user_name = '$admin_name', ".
"email = '$admin_email', ".
"status = '$admin_status' ".
$action_list.
$role_id.
$password.
$nav_list.
"WHERE user_id = '$admin_id'";
7、更改获取管理员列表get_admin_userlist方法:
function get_admin_userlist()
{
$list = array();
$sql = 'SELECT user_id, user_name, email, add_time, last_login, last_ip, status '. //增加status
'FROM ' .$GLOBALS['ecs']->table('admin_user').' ORDER BY user_id DESC';
$list = $GLOBALS['db']->getAll($sql);
foreach ($list AS $key=>$val)
{
$list[$key]['add_time'] = local_date($GLOBALS['_CFG']['time_format'], $val['add_time']);
$list[$key]['last_login'] = local_date($GLOBALS['_CFG']['time_format'], $val['last_login']);
}
return $list;
}
第四步:修改模板文件admin/templates/privilege_info.htm。
{if $select_role}
<tr>
<td class="label">{$lang.select_role}</td>
<td>
<select name="select_role">
<option value="">{$lang.select_please}</option>
{foreach from=$select_role item=list}
<option value="{$list.role_id}" {if $list.role_id eq $user.role_id } selected="selected" {/if} >{$list.role_name}</option>
{/foreach}
</select>
</td>
</tr>
{/if}
在以上代码下添加加代码:
{if $select_status}
<tr>
<td class="label">{$lang.select_status}</td>
<td>
<select name="status">
<option value="">{$lang.select_please}</option>
{foreach from=$select_status item=list}
<option value="{$list.status}">{if $list.status eq 1}{$lang.normal}{else}{$lang.left}{/if}</option>
{/foreach}
</select>
</td>
</tr>
{/if}
新闻热点
疑难解答