📄 power.ec
字号:
/*
* 周国祥 2001/04/06 修改操作员库表处理
*
* 2001/04/16 modified init_power()
* 2001/04/16 modified lpower==>purview_key
* 原权限放在center_oper表中,用操作员的密码加密存放;
* 目前,权限该放在sys_role表,只能用统一的purview_key加密;
* 或再加上角色代码???
*/
#include <stdio.h>
#include "../bcs/menu.h"
#include "all.h"
#define ITEMS 256 /* 与MAX_MENU_ITEMS同 */
EXEC SQL INCLUDE sqlca;
EXEC SQL WHENEVER SQLERROR CALL error_handler;
EXEC SQL WHENEVER SQLWARNING CALL warning_handler;
EXEC SQL WHENEVER NOT FOUND CALL notfound_handler;
char purview_key[4] = "1996";
/*
* 菜单权限解析处理
*/
int init_power(oper)
char *oper;
{
int i, j, k, sum = 0, stop = 0;
char flag;
$char oper_no[7];
char role_code[4];
char purview[257]; /* 只用前64(ITEMS/4)个字符 */
if (get_role_purview(oper, role_code, purview) < 0)
return(-1);
for (i = 0; i < ITEMS / 4; i++) {
flag = purview[i] ^ purview_key[i % 4];
for (j = 0; j < 4; j++) {
k = i * 4 + j;
if (SMenuItem[k].iChildMenu == 99) {
SMenuItem[k].iPower = 1;
stop = 1;
}
if (flag & (1 << (3 -j))) {
sum++;
if (!stop){
SMenuItem[k].iPower = 1;
}
} else
if (!stop){
SMenuItem[k].iPower = 0;
}
}
}
if (sum % 2)
return(0);
else
return(-1);
}
int get_short_power(short_power, long_power)
char *short_power;
char *long_power;
{
int i, sum = 0;
memset(short_power, 0, ITEMS/4+1);
for (i = 0; i < ITEMS; i++)
if (long_power[i]) {
short_power[i / 4] |= (1 << (3 - (i % 4)));
sum++;
}
if (!(sum % 2)) {
if (short_power[ITEMS/4-1] % 2) short_power[ITEMS/4-1]--;
else short_power[ITEMS/4-1]++;
}
for (i = 0; i < ITEMS/4; i++)
short_power[i] ^= purview_key[i % 4];
return(0);
}
int get_long_power(short_power, long_power)
char *short_power;
char *long_power;
{
int i, j, k, stop = 0;
char flag;
for (i = 0; i < ITEMS/4; i++) {
flag = short_power[i] ^ purview_key[i % 4];
for (j = 0; j < 4; j++) {
k = i * 4 + j;
if (k >= iMenuItemCount || SMenuItem[k].iChildMenu == 99)
stop = 1;
if (stop)
long_power[k] = 1;
else
if (flag & (1 << (3 - j)))
long_power[k] = 1;
else
long_power[k] = 0;
}
}
return(0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -