/** * 允许写入检查 - 角色和细粒度权限越权检查 */ 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']); } }
/** * 比较角色权限的大小 * * @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); }