小弟最近写了一个MIS的小程序。
但其中客户的权限折磨了我许久。因为开发周期比较短,所以没有把权限设计得很细,而是硬编码了几个角色,在每个窗体打开的时候检查是否有本窗体打开的权限,结果,客户的权限要求越来越细,最后到了这样的地方。A用户仅能修改一个34个字段的表中的第1,5,9列。
B用户仅能个性A用户修改过的数据,其他的数据一概不处理,连查都不能查。B修改过后的数据,A就不能再修改了。
C用户仅能查看到其中的 1-13,15-17列
D用户能看到所有的数据,但什么都不能改。
E用户能看到A、B、F、G、H处理的数据,
F用户能看到A、B、H、J处理过的数据,并且可以修改他们的数据。
.......MD,如果要做到这样,我岂不是要设计一个权限模块,细化到每个列的增删改?
解决方案 »
- delphi怎样实现url的跳转,求代码
- TService 中使用到网络路径的问题
- 如何让页面只能在webbrowser里使用,而直接在浏览器里无发访问
- 高手请进,为什么可执行文件在xp系统下能够运行,换在win2000下就不能够运行了呢?顶者有分~~
- 请教各位高手:如何将 DBGrid 中任意一格中的字符显示在 label 上?(等待急救~~~~~)
- 使用speed button!!
- WebBrowser连接上一个网页后,点击网页中的一个连接会自动调用IE显示,怎么办?
- Delphi的菜单哪去了?奇怪!
- 关于模糊查找的问题???一定给分!!!
- 还是dbgrid排序
- 多线程读取SQL数据。来者有分
- topgrid的问题 单元格属性为combo时 如果让鼠标进入该单元格或在该单元格输入内容 就使其自动下拉?
F用户能看到A、B、H、J处理过的数据,并且可以修改他们的数据。
----------
除了这2条 其他的我们的系统都实现了 而且跑的不赖其实就3块:
1。所有业务的权限控制 (这个最有用)2。相应的数据查看过滤(比如业务员只能看自己的客户 就简单的加一个 where ...and 客户ID in (select xxx from yyy where empid='zzz')) 这个业务员很喜欢 不用每天看到一堆数据
3。具体莫一项数据(字段)的查看权限 这个米虾米用
B的SQL: Select 1,5,9 from table where update by A;
C的SQL: Select 1~13,15~17 from table for update;
D的SQL: select * from table for readonly
E的SQL: select * from table where update by A、B、F、G、H for readonly;
F的SQL: select * from table where update by A、B、H、J for update;
................简单的思路,自己可以根据实际的情况,再概括一下,精简一下。呵呵,最近再看C#,可以根据上面的思路,建立一个基类(或接口),其他所有的用户从这个基类继承,但都有update或者review 的方法,
用多态控制。
其它的如添加删除权限可以仪类似的方法去做如果你自己做,最好有一套自己的,且完整的权限管理模块
缺点:工作量大
在那有34个字段的表里再加多一字段,存放跟权限有关的信息。
ABCDEF修改数据时,同时更新这字段的标志位。
而他们可操作的数据你就根据这字段的标志位来检索就是了。这是一个比较快的方法,但不方便扩展。
这里控制的是同一项菜单下面,打开同一个窗口,对数据列的权限不一样。谢 suifengoffice
窗体多的话,控制起来和修改起来都很麻烦谢 hawk_e2e
但这个东西里有 159个表的话,就。
建操作权限表,把操作这些信息的数据记录在一个表中操作数据的时候,根据权限表中的数据操作(比如只能查,或者只能修改,只能修改哪些字段)这些是麻烦,不过很实用
配置表的结构是
权限名 表名(对应某个界面的表格) 字段名 dbgrid控件的属性(isVisible,Readonly,title,width)等这个在登录界面时重设grid,可以达到按照不用用户权限,可以让他们看见哪些字段,哪些字段不能修改的功能另外权限设为数字,用统一函数判断.
1,只能查看数据~
2,只能修改自己的数据
.....
等等程序的逻辑上,gird表的设置优先于权限设置
E用户能看到A、B、F、G、H处理的数据,
F用户能看到A、B、H、J处理过的数据,并且可以修改他们的数据。这个功能建立一个表
权限名 是否限制 限制Str
然后在查询语句里特殊加上...