200分求一点点思路

EricHxy 2003-05-14 11:10:21
我现在要做一个权限管理模块。在里面,可以定义角色(给角色定义权限集合),给用户授予角色。对于登录系统的用户,根据其不同的权限,我可以控制界面的显示,譬如菜单、按钮的灰化与否,以控制用户可以访问的功能模块。而且,我还需要控制用户对数据库的访问,譬如某些权限的用户不能访问数据库的某些表,或者不能修改但可以读取某些表。
希望各位前辈踊跃发言,哪怕一点点没有思考成熟的建议也好。我会根据对我帮助的大小给分。如果启发很大,我还会加分。
首先谢谢了!
...全文
89 46 打赏 收藏 举报
写回复
用AI写文章
46 条回复
切换为时间正序
请发表友善的回复…
发表回复
Panr 2003-05-18
  • 打赏
  • 举报
回复
to lpc1982(精灵):
比如联想,一个企业中可以接触电脑的员工有多少?
很少有企业愿意把员工帐户不加区分地建立在企业的核心产品的数据库中
lpc1982 2003-05-18
  • 打赏
  • 举报
回复
使用数据库中的视图就可以,让不同的人看不同的视图,清参考<<数据库概论>>绿皮的
Panr 2003-05-18
  • 打赏
  • 举报
回复
对每条记录来说,至少应该保存创建者帐号,一般的修改权限对创建者自动就是允许的
最基本的对象权限做到这个判断也就够了(非创建者的权限则需要查询权限模块的数据库)

如果你追求完美的话,可以模仿Windows Active Directory,设立一个blob 类型的权限字段,把允许和禁止哪些帐号访问的权限保加密(加密和解密过程由权限模块实现)后存在blob里,然后把blob 传给权限模块以确定当前帐号有什么权限
EricHxy 2003-05-17
  • 打赏
  • 举报
回复
谢谢BinaryWorld(甘草) 的评论
BinaryWorld 2003-05-17
  • 打赏
  • 举报
回复
To Panr(光荣)

完全支持,只是个人表达能力不足,其实你说的那个东西,在我的第一个数据库设计里就碰到了,我是给一家制药单位做的员工人事管理,有权限制度,我刚开始没有考虑好直接就开始做了,是管理200人的。都快成了的时候,才发现这一点,后来做了修改。
强烈支持!
neusoft_kehuan 2003-05-16
  • 打赏
  • 举报
回复
个人感觉BinaryWorld(甘草) 的方法简单明了!
曾经的猎狐 2003-05-16
  • 打赏
  • 举报
回复
学习ing
Panr 2003-05-16
  • 打赏
  • 举报
回复
to BinaryWorld(甘草):
偶觉得应该是先确定模块划分,然后才考虑实现方法比较好
偶对权限模块的定义是如“2003-05-15 21:22:00 ”发表中的说明

在“功能逻辑模块”内部就使用等级权限制度的话,当用户部门遇到重组的时侯,你可能会很被动了,所以偶认为还是以命令和操作为粒度进行控制比较好
最简单的就是为每个帐号记录分别记录是否允许指定操作的标志

另外在偶的解决方案中,等级权限制可以通过角色嵌套来实现,即,某个角色可以完全包括另一个角色的所有权限
aben456 2003-05-16
  • 打赏
  • 举报
回复
用组来设计吧
目标:同一个组的人有相同的权限;
一个人只能属于同一个组。

组要作成一个表,不同的组ID代表不同的权限;
用户ID也有一个表,对应一个组的ID
BinaryWorld 2003-05-16
  • 打赏
  • 举报
回复
数据库对权限的制度有两种,具体名字忘记了。

一种,采用等级制度,被认为是比较不错的,就是将整个系统划分位几个功能等级,而用户都被收录在不同的等级,这样例如:用户ABC,三个人,被分为二个登记1,2,如果A,B都被分为2,他们登陆进去后就认为是2级用户登陆,C进去就认为是1级用户进入,用户的数据库中存储一定的级别信息,在系统里,可以只存在一个最小信息就是,目前的登陆级别。而等级则是有相关的权限分配表,这样可以通过直接修改权限的功能来修改某一级别的用户功能。

二种,将数据库中的信息,每个都标志一个权限,这好象是安全级别要求比较高的地方才使用,例如:国籍,ID,两个数据库内存,都被一个被设置在安全级别4,一个被设置在安全级别5,如果用户的访问级别是5,那么他只能和他级别相同或更低的功能。这个没有做过,估计要处理的出错消息比较复杂。同样最小也要有一条登陆信息,就是登陆者的安全级别。

通过数据库的这些标记,然后对应于自己的程序里,进行设置,例如: 工资,只有3级拥护才可以查看到。

class login
{
int nright;
public:
int getloginright();
void Setloginright(int temp);
};

login::getloginright()
{
return nright;
}
login::Setloginright(int temp)
{
nright=temp;
}

login loginer;
loginer.Setloginright(3);

switch(login.getloginright())
{
case 1:
..
break;
case 2:
..
break;
... //设置好程序里对不同权限的不同控制办法例如:不激活按纽
}
将所有的要划分级别的地方事先都定义好BOOL属性,如果为真则显示,为假则不显示。

这只是方法,自己可以适量参考!

EricHxy 2003-05-16
  • 打赏
  • 举报
回复
to Panr(光荣) :
我觉得你的想法非常不错。确实应该减少功能和用户的耦合度。


我想,在各位老大的提示下,功能的控制我已经考虑得差不多了。

不知道大家是否能够对数据的访问权限控制提供一点思路?
明天去抢劫 2003-05-16
  • 打赏
  • 举报
回复
gz
samyoung 2003-05-15
  • 打赏
  • 举报
回复
把用户和脚色邦定,我觉得反而不好,为什么,一个脚色确定了,那么他的权限也就确定了,这在很多系统里面是不方便的,

我觉得,一个较好的方案是,将所有的权限分类,用list或者tree显示出来,对于每一个用户,都可以由管理员来确定这个操作者的相关权限,可以限制得很细致。
advanced 2003-05-15
  • 打赏
  • 举报
回复
用户不要和权限绑定,用户绑定角色,角色绑定权限。这样可以灵活配置。
lblyy76 2003-05-15
  • 打赏
  • 举报
回复
数据库是必要的,要捆绑在一起的变量多,要注意关系。
samyoung 2003-05-15
  • 打赏
  • 举报
回复
我靠,我刚作完一个权限管理模块,就看到有人问这个了,真亲切啊,呵呵


给你一点提示,在数据中建立一个表用于保存用户的权限,这个表可以这样建立
1,user_id
2,menu_authority
3,button_authority
4,database_authority
5,other_authority

用这个表来保存用户的权限,

每次程序启动的时候,登陆确认以后,根据用户名在这个权限库中获得该用户的所有权限,用一个全局的list或者array来保存这些权限。

然后在你的程序中,需要认证的地方,根据登陆用户的用户名去查找他的权限list中是否能对菜单或者按钮有操作权限,如果没有,就禁止操作。


具体的操作,就不用我讲了吧?
hongtog 2003-05-15
  • 打赏
  • 举报
回复
我也碰到过差不多的问题,
先在数据库里设置用户的权限,
再根据权限来灰化或显示相应的菜单项或按扭功能项。
3jaja 2003-05-15
  • 打赏
  • 举报
回复
定义一个结构:
struct{
char cName[]// 用户名
int q;//有何权限
}s;

保存结构文件:
输入用户名,open文件
if(0==strcmp(s.cName,"用户名"))//比较用户名
{
switch(s.q)//有何权限
{
case :
/*根据其不同的权限,我可以控制界面的显示,譬如菜单、按钮的灰化与否,以控制用户可以访问的功能模块。而且,我还需要控制用户对数据库的访问,譬如某些权限的用户不能访问数据库的某些表,或者不能修改但可以读取某些表。*/
}
}
firetoucher 2003-05-15
  • 打赏
  • 举报
回复
如果你控制得这么细,建议你直接使用数据库dbms自带的用户管理,然后在上面作对模块权限的控制和界面设置,而且可扩展性强,可谓事半功倍。
samyoung 2003-05-15
  • 打赏
  • 举报
回复
刚才说错了一点,这个函数应该是
BOOL FindAuthorityInList(CString strMunu)

在update_command_ui函数中,可以


CString str="ID_MY_MENU_TEST";
if(theApp.FindAuthorityInList(str))
{
pCmdUI->Enable(TRUE);
}
else
{
pCmdUI->Enable(FALSE);
}


这里的ID_MY_MENU_TEST你也可以用其它的形式,反正只要唯一识别就是了,你也可以用序号,但是这个序号要能将每一个菜单分开。这样就行了
加载更多回复(26)

16,550

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧