日期:2014-05-20  浏览次数:21324 次

用C#开发C/S系统,权限模块怎样架构?
从我写程序的经历来看,系统权限有如下二种方法:
1.在sql   server   2000中直接设置角色,然后每个用户分别归属于某个角色.也就是前端的用户全部与sql   server中的用户一致.
然后在sql中写存储过程,给于角色权限.
这种方法很麻烦也不方便于前端的权限管理.
2.在前端程序中写权限.
    也就是限制某个模块不能打开或显示为disable.这种方法只是表面上做了权限设置.但方便前端管理.
大家还有没有更好的权限设置和管理方法?帮帮忙!!!急!!!!


------解决方案--------------------
关注帮顶
------解决方案--------------------
权限当然是第二种,
------解决方案--------------------
没用过你的第一种方法。

都用第二种方法。但是你的第二种方法的实现方式有很多啊。
------解决方案--------------------
一般都是第2种办法,
安全性要求高可以考虑1和2结合。
------解决方案--------------------
我以前用过你说的第一种,但比较麻烦,不好控制,用第二种,把菜单和数据库相结合来控制.

你可以把菜单的文字放入数据库中,运行时从里面读出来,然后控制.
------解决方案--------------------
第二种.
------解决方案--------------------
选择第二种
楼主所说的“也就是限制某个模块不能打开或显示为disable.这种方法只是表面上做了权限设置”,不知道楼主怎么会这样的想法,实际这些模块的使用除了你自己编写的程序能够调用外,其他人还能通过其它的途径进行调用吗?
------解决方案--------------------
本人喜欢第二种,第一种的确比较麻烦,而且有些东西也不好控制
比如:在发货时,某人有发货的权限,但只能发指定的客户,这时就不好用数据库权限控制了,因为他对发货表有写权限,但要满足指定客户
愚见,不对请指正
------解决方案--------------------
第二种,我的方法是:把模块全部编号顺序入库,然后每个模块相当于二进制的位,这样每个用户的权限用long记录,就可以记录每个人的每个模块的权限(用位与判读),当然办法只适合几十个模块的小系统。
------解决方案--------------------
参考:
http://www.cnblogs.com/Roping/archive/2007/02/13/649161.html

这个项目采用分层的方式进行组织开发,但是分层不够彻底!看他的项目组织方式可以看出他是WEB表示层(WEB)和应用层(core)两层的,

Core这个工程其实应该再分不同工程,以便在部署的时候,可以对不同的DLL进行引用!

1. DTO这个文件夹单分出来,作为不同层(物理也好。,罗辑也好)的传输对象,独立于不同的项目文件,最好让每个DTO对象继承一个抽象类,这样在做多态,注入,WBS等进行反射的时候可以节省很多代码(可以这里没有这样做)!

2. Domain这层是NHibernate的域模型层!主要采用hbm配置文件的方式实现对象的数据库映射关联!注意hbm文件采用潜入式资源的方式进行编译!这层代码基本上可以不用手写,呵呵,包括上面介绍的DTO也用手写,大家可以采用CodeSmith等工具进行生成,NHibernate本身也提供这样的工具NHibernate.Tool.hbm2net,我个人喜欢MyGeneration!

3. Service,这层就是我们通常讲的业务逻辑层,对于对象的CRUD操作都是在这层进行逻辑验证分类等,这里面的逻辑一般集中在业务领域逻辑,设计到数据层业务逻辑象数据表级联删除更新等逻辑在Domain配置文件已经做好,字段长度格式等验证我们已经在WEB做了验证!这个也符合我们通常做法!

4. NHHelper,这层是我们通常说说的数据访问层,对NB提供的对象持久化功能进行封装,实现对不同数据库的透明支持!同时也实现对NH中数据访问对象的Cache策略!

5. Util,这个项目镇的应该单独分出来,看项目名字你就知道了,提供常用的功能类!
这个项目我把它改写了下,引用最新的NHibernate的版本号是1.2.0.2003!