Example #1
0
/**
 * 允许写入检查 - 角色和细粒度权限越权检查
 */
function allow_write($fields)
{
    global $_LANG, $_PRIV;
    /* 提交的管理员的角色信息 */
    $role_info = info_role(array('role_id' => $fields['role_id']));
    /* 无效的角色信息 */
    if (empty($role_info)) {
        sys_msg($_LANG['lawless_submit']);
    }
    /* 对提交的管理员的角色进行越权检查(当前管理员角色必须大于提交的角色) */
    $filter1 = array('info' => $_PRIV['role']);
    $filter2 = array('info' => $role_info);
    if (cmp_role($filter1, $filter2) != '>') {
        sys_msg($_LANG['lawless_submit']);
    }
    /* 对提交的管理员的细粒度权限进行越权检查(当前管理员细粒度权限必须大于等于提交的细粒度权限) */
    $filter1 = array('privilege_ids' => admin_privilege_ids());
    $filter2 = array('privilege_ids' => $_POST['privilege_ids']);
    $flag = cmp_privilege($filter1, $filter2);
    if ($flag == '<' || $flag == false) {
        sys_msg($_LANG['lawless_submit']);
    }
}
Example #2
0
/**
 * 比较角色权限的大小
 *
 * @params arr  $filter1 条件1
 * @params arr  $filter2 条件2
 *
 * @return mix  '>' 表示$filter1大.  '=' 表示一样大.  '<' 表示$filter2大.  false 表示无法比较
 */
function cmp_role_privilege($filter1, $filter2)
{
    $cmp1 = array();
    /* 提取条件数据 */
    if (is_numeric($filter1['role_id']) && intval($filter1['role_id']) > 0) {
        $filter1['privilege_ids'] = all_role_privilege_id(array('role_id' => $filter1['role_id']));
    }
    return cmp_privilege($filter1, $filter2);
}