读ecshop笔记(二)——RBAC

ECSHOP在线手册:http://book.ecmoban.com/

admin_action 管理权限分配

字段类型Null/默认注释
action_id tinyint(3)  否 /  自增ID号
parent_id tinyint(3)  否 / 0 该id 项的父id,对应本表的action_id字段
action_code varchar(20) 否 /  代表权限的英文字符串,对应汉文在语言文件中,如果该字段有某个字符串,就表示有该权限
relevance varchar(20) 否 /   

role  

字段类型Null/默认注释
Role_id Smallint(5)  
Role_name Varchar(60)  
Action_list Text  
Role_describe text  

admin_user  管理员管理

字段类型Null/默认注释
user_id smallint(5)  否 /  自增id号,管理员代码
user_name varchar(60) 否 /  管理员登录名
email varchar(60) 否 /  管理员邮箱
password varchar(32) 否 /  管理员登录密码
add_time int(11) 否 /  管理员添加时间
last_login int(11) 否 /  管理员最后一次登录时间
last_ip varchar(15) 否 /  管理员最后一次登录IP
action_list text 否 /  管理员管理权限列表
nav_list text 否 /  管理员导航栏配置项
lang_type varchar(50) 否 /   
agency_id smallint(5)  否 /  该管理员负责的办事处理的id,同agency的agency_id字段.如果管理员没有负责办事处,则此处为0
suppliers_id smallint(5) 是 / 0  
todolist longtext 是 /  记事本记录的数据
role_id smallint(5) 是 /   

action_list 权限列表会跟随role_id 父类的管理权限分配而改变

admin_log  管理日志

字段类型Null/默认注释
log_id int(10)  否 /  自增ID号
log_time int(10)  否 / 0 写日志时间
user_id tinyint(3)  否 / 0 该日志所记录的操作者id,同admin_user的user_id
log_info varchar(255) 否 / 管理操作内容
ip_address varchar(15) 否 / 登录者登录IP

admin_message  管理留言 

字段类型Null/默认注释
message_id smallint(5)  否 /  自增id号
sender_id tinyint(3)  否 / 0 发送该留言的管理员id,同admin_user的user_id
receiver_id tinyint(3)  否 / 0 接收消息管理员id,同admin_user的user_id,如果是给多个管理员发送,则同一个消息给每个管理员id发送一条
sent_time int(11)  否 / 0 留言发送时间
read_time int(11)  否 / 0 留言阅读时间
readed tinyint(1)  否 / 0 留言是否阅读1已阅读;0未阅读
deleted tinyint(1)  否 / 0 留言是否已经被删除 1已删除;0未删除
title varchar(150) 否 /  留言的主题
message text 否 /  留言的内容

验证权限

/**
 * 判断管理员对某一个操作是否有权限。
 *
 * 根据当前对应的action_code,然后再和用户session里面的action_list做匹配,以此来决定是否可以继续执行。
 * @param     string    $priv_str    操作对应的priv_str
 * @param     string    $msg_type       返回的类型
 * @return true/false
 */
function admin_priv($priv_str, $msg_type = '' , $msg_output = true)
{
    global $_LANG;

    if ($_SESSION['action_list'] == 'all')
    {
        return true;
    }

    if (strpos(',' . $_SESSION['action_list'] . ',', ',' . $priv_str . ',') === false)
    {
        $link[] = array('text' => $_LANG['go_back'], 'href' => 'javascript:history.back(-1)');
        if ( $msg_output)
        {
            sys_msg($_LANG['priv_error'], 0, $link);
        }
        return false;
    }
    else
    {
        return true;
    }
}

/**
 * 检查管理员权限
 *
 * @access  public
 * @param   string  $authz
 * @return  boolean
 */
function check_authz($authz)
{
    return (preg_match('/,*'.$authz.',*/', $_SESSION['action_list']) || $_SESSION['action_list'] == 'all');
}

/**
 * 检查管理员权限,返回JSON格式数剧
 *
 * @access  public
 * @param   string  $authz
 * @return  void
 */
function check_authz_json($authz)
{
    if (!check_authz($authz))
    {
        make_json_error($GLOBALS['_LANG']['priv_error']);
    }
}
原文地址:https://www.cnblogs.com/lixingbaophp/p/5251387.html