当前位置: 代码迷 >> ASP.NET >> |M| 500分:求做一个Web系统的权限的编程思想和数据库设计和具体实现(已经写了小弟我的看法)
  详细解决方案

|M| 500分:求做一个Web系统的权限的编程思想和数据库设计和具体实现(已经写了小弟我的看法)

热度:4026   发布时间:2013-02-26 00:00:00.0
|M| 500分:求做一个Web系统的权限的编程思想和数据库设计和具体实现(已经写了我的看法)
一个车票销售系统:
要求对每个用户的每一个页面的每一个操作进行权限管理
比如有以下环境(我自己想的)
------------------------
比如有以下角色
汽车操作员
火车操作员
财务员
管理员

有以下模块
汽车票
火车票
财务
管理

比如有以下用户
小夏   -->     操作员
小唐   -->     汽车票操作员
小宋   -->     火车票操作员
小元   -->  账务员 
小明   -->     管理员

然后有以下面面
bus/AddTicket.aspx 汽车下单
bus/EditTicket.aspx 汽车单修改与删除
bus/ListTicket.aspx 汽车下单列表
train/AddTicket.aspx 火车下单
train/EditTicket.aspx 火车单修改与删除
train/ListTicket.aspx 火车下单列表
Finance/Audit.aspx 财务对账
manage/Set.aspx 车票修改与其他设置

然后给
汽车模块设置权限
汽车查看         1
汽车下单         1
汽车修改         1
汽车删除         0
火车查看         0
火车下单         0
火车修改         0
火车删除         0
财务对账         0
管理设置         0

火车模块设置权限
汽车查看         0
汽车下单         0
汽车修改         0
汽车删除         0
火车查看         1
火车下单         1
火车修改         1
火车删除         0
财务对账         0
管理设置         0

财务模块设置权限
汽车查看         0
汽车下单         0
汽车修改         0
汽车删除         0
火车查看         0
火车下单         0
火车修改         0
火车删除         0
财务对账         1
管理设置         0

管理模块设置权限
汽车查看         1
汽车下单         1
汽车修改         1
汽车删除         1
火车查看         1
火车下单         1
火车修改         1
火车删除         1
财务对账         0
管理设置         1

因为上面小夏为 "操作员 "   那就让他拥有两个模块角色“汽车|火车操作员”
基他的也相应设置条自的权限
-------------------------
然后比如我现在是小唐登录系统因为他只有“汽车票操作员”这个模块
当他登录的时候比如链接进“火车票管理系统”的时候系统就会判断出他不是这一块的就提示权限不足退出
但当他进入bus/EditTicket.aspx(汽车单修改与删除)页面时,因为他可以正常删除,但当点击删除的时候提示权限不足不执行操作

像我上面这样设置对不对;
还有数据库具体要怎么来设计

谢谢


------解决方案--------------------------------------------------------
参考:
http://www.cnblogs.com/Roping/archive/2007/02/13/649161

这个项目采用分层的方式进行组织开发,但是分层不够彻底!看他的项目组织方式可以看出他是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!