📄 right.cpp
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Right.h"
#include "dido.h"
#include "logfile.h"
#include "syspassword.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
struct tagITEMTEXT{
WORD nItem;
char *pszText;
};
static tagITEMTEXT AllDones[]={
{DONE_LOGFILE,"日志资料管理"},
{DONE_PRINT, "打印数据"},
{DONE_VIEWRECORD,"停车记录查询"},
{DONE_TOTAL, "统计报表"},
{DONE_PAUSECR,"暂停/继续通讯控制器"},
{DONE_MANAULBARR,"手动开闸"},
{DONE_EDITCARD, "设置卡片资料"},
{DONE_EDITUSER, "设置车主资料"},
{DONE_EDITCONTROLER,"设置通讯控制器"},
{DONE_EDITROADWAY, "设置车道资料"},
{DONE_EDITPRICE,"设置停车收费"},
{DONE_EDITPARK,"设置停车场资料"},
{DONE_DATABASE, "数据库管理"},
{DONE_EDITACCOUNT,"用户帐号密码管理"},
{DONE_EDITSYSPASSWORD,"设置系统密码"},
};
//获取单项权限
static int GetOneRightWithDone(DWORD nRight,int nDone);
//获取用户级别的文本
char *GetAccTextWithLevel(int nItem)
{
static char *pszText[]={"普通用户","超级用户",
"管理员","自定义"};
char *p;
if(nItem>=0 && nItem<sizeof(pszText)/sizeof(char *))
p=pszText[nItem];
else p=NULL;
return(p);
}
//获取默认帐号
void *GetDefAccount(void)
{
static ACCOUNT DefAccount=
{"Administrator","",RIGHT_MANAGE};
return(&DefAccount);
}
//获取当前帐号参数
long GetCurAccParam(int nMode)
{
static ACCOUNT CurAccount;
long lParam;
if(nMode==1)//名称
lParam=(long)CurAccount.szName;
else if(nMode==2)//密码
lParam=(long)CurAccount.szPassword;
else if(nMode==3)//权限
lParam=(long)CurAccount.nRight;
else if(nMode==4)//级别
lParam=(long)CurAccount.nLevel;
else //帐号
lParam=(long)&CurAccount;
return(lParam);
}
//设置当前帐号
void SetCurAccount(void *pAccount)
{
ACCOUNT *pCurAcc;
DWORD nRight;
pCurAcc = (ACCOUNT *)GetCurAccount();
MoveMemory(pCurAcc,pAccount,sizeof(ACCOUNT));
SetCurDefRight();//设置当前帐号默认权限
}
//设置当前帐号默认权限
void SetCurDefRight(void)
{
ACCOUNT *pCurAcc;
DWORD nRight;
pCurAcc = (ACCOUNT *)GetCurAccount();
nRight = GetDefaultRight(pCurAcc->nLevel);
if(nRight!=0)//系统默认的权限
pCurAcc->nRight = nRight;
}
//验证用户级别
int ValidateLevel(int nDoneItem,int nLevel)
{
static char pszText[]=
"对不起! \n\n您的权限级别, 不能进行此操作...";
ACCOUNT *pCurAcc;
int rc;
rc=FALSE;
pCurAcc = (ACCOUNT *)GetCurAccount();
if((int)pCurAcc->nLevel >= nLevel)rc=TRUE;
if(rc) rc= GetOneRightOnAcc(pCurAcc,nDoneItem);//获取帐号单项权限许可
if(rc==FALSE){
MessageBeep(MB_ICONHAND);
Application->MessageBox(pszText,GetPasswordTitle(),
MB_OK|MB_ICONEXCLAMATION|MB_APPLMODAL);
}
return(rc);
}
//验证用户级别和密码(nPass<0忽略密码,nMost=0 管理员用户可忽略密码)
int CheckAccountRight(int nDoneItem,int nLevel,int nPass,int nMost)
{
int rc,n;
rc= ValidateLevel(nDoneItem,nLevel); //验证用户权限
if(rc){
n = GetCurAccLevel();
if(nMost || n!=RIGHT_MOST)//检查nPass级密码
rc= CheckSysPassword(Screen->ActiveForm,nPass);
}
return(rc);
}
//根据项目编号获取权限名称
char *GetRightTextWithDone(int nDone)
{
char *p;
int i,n;
n = sizeof(AllDones)/sizeof(tagITEMTEXT);
for(i=0;i<n;i++)
if((int)(AllDones[i].nItem)==nDone)break;
if(i<n)p=AllDones[i].pszText;
else p=NULL;
return(p);
}
//根据序号获取权限名称
char *GetRightTextWithItem(int nItem)
{
char *p;
int n;
n = sizeof(AllDones)/sizeof(tagITEMTEXT);
if(nItem>=0 && nItem<n)
p=AllDones[nItem].pszText;
else p=NULL;
return(p);
}
//根据序号获取权限编号
int GetRightWithItem(int nItem)
{
int n;
n = sizeof(AllDones)/sizeof(tagITEMTEXT);
if(nItem>=0 && nItem<n)
n=AllDones[nItem].nItem;
else n=-1;
return(n);
}
//根据级别获取系统默认的权限
DWORD GetDefaultRight(int nLevel)
{
DWORD nRight;
//定义权限
if(nLevel==RIGHT_USER)nRight = 0x0ff; //一般用户
else if(nLevel==RIGHT_POWER)nRight= 0x0ffff; //超级用户
else if(nLevel==RIGHT_MANAGE)nRight = MAXDWORD; //管理员
else nRight=0;
return(nRight);
}
//获取单项权限许可
int GetOneRightWithDone(DWORD nRight,int nDone)
{
DWORD n;
int rc;
if(nDone>=0 || nDone <sizeof(DWORD)*8){
n = 1<<nDone;
rc = nRight & n;
if(rc!=0)rc=TRUE;
else rc=FALSE;
}
else rc=TRUE;
return(rc);
}
//设置帐号单项权限许可
int SetOneRightOnAcc(void *pAcc,int nDone,int nMode)
{
ACCOUNT *t;
DWORD n;
int rc;
t = (ACCOUNT *)pAcc;
if(t==NULL)return(0);
if(nDone<0 || nDone>=sizeof(t->nRight)*8)return(0);
n = 1<<nDone;
rc = t->nRight & n;
if(nMode>0) t->nRight |= n;
else if(nMode==0)t->nRight &= ~n;
if(rc!=0)rc=TRUE;
return(rc);
}
//设置帐号所有权限许可
int SetAllRightOnAcc(void *pAcc,DWORD nRight)
{
ACCOUNT *t;
DWORD n;
t = (ACCOUNT *)pAcc;
if(t==NULL)return(0);
n = t->nRight;
t->nRight=nRight;
return(n);
}
//保存一个日志
int SaveOneLogToFile(int nDone)
{
char *pszAccName,*pszDone;
int rc;
pszAccName = GetCurAccName();//获取当前帐号名
pszDone = GetRightTextWithDone(nDone);
//保存帐号日志
rc=SaveAccountLog(pszAccName,pszDone);
return(rc);
}
//查看日志
int LookAppLog(TObject *Owner)
{
static char pszTitle[]="停车场管理系统日志";
int rc;
rc=LookLog(Owner,pszTitle); //查看日志
return(rc);
}
//设置当前帐号为无(自定义,且无任何权限)
int SetCurAccToNone(void)
{
static char pszNoneAcc[]="(None Operator)";
ACCOUNT a;
ZeroMemory(&a,sizeof(a));
lstrcpy(a.szName,pszNoneAcc);
a.nLevel = RIGHT_DEFINE; //自定义
SetCurAccount(&a);//设置当前帐号
return(TRUE);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -