天天看点

通用权限管理系统组件 (GPM - General Permissions Manager) 中实现数据列的权限,附源码...

我们经常需要实现灵活配置数据列的访问权限控制,例如只有某些用户可以看到“开户行,银行帐户,公司税号”等字段,其他用户都不能访问,也不能查看这几个字段,类似的需求在通用权限管理系统里是如何实现的? 我们以图文的方式把主要实现流程讲解给大家。

   通用权限里追求的理念是,不依赖某个开发人员尽量能用工具实现,能重复利用,能经得起推敲,函数源码可以重复利用,不管是才C\S, B\S 都可以重复利用的强大函数库,不用总是推倒重来的严格数据库架构,同时还可以兼容多种数据库的目标,打造一个一劳永逸的通用权限管理系统,成为主流各种信息管理系统的核心第3方系统组件,我们不主张去做任何一个项目,但是我们的组件可以用在任何信息化项目里,我们为成千上万的开发商提供服务。  

   程序的运行效果如下:

通用权限管理系统组件 (GPM - General Permissions Manager) 中实现数据列的权限,附源码...

这个是通过调用列权限服务的SOA模式调用,然后对界面的表格数据进行一些处理,

1:把表格列过滤为只能访问的列。

2:把可编辑的权限的列进行设置。

3:把拒绝访问的列也可以剔除掉(参考)。

             //  这里是按列的数据权限的权限进行数据绑定的例子代码

             //  这里是当前用户能访问的列名

            TableColumnsService tableColumnsService =  new TableColumnsService();

             string[] accessColumns = tableColumnsService.GetColumns( this.UserInfo, BaseBusinessCardTable.TableName,  " Column.Access ");

             //  设置为只能访问的列

            BaseInterfaceLogic.SetColumns( this.grdBusinessCard, accessColumns);

             string[] editColumns = tableColumnsService.GetColumns( this.UserInfo, BaseBusinessCardTable.TableName,  " Column.Edit ");

             //  设置为可编辑列

            BaseInterfaceLogic.SetEditColumns( this.grdBusinessCard, editColumns);

             //  拒绝访问的权限列名获取

             string[] deneyColumns = tableColumnsService.GetColumns( this.UserInfo, BaseBusinessCardTable.TableName,  " Column.Deney ");

            BaseInterfaceLogic.RemoveColumns( this.grdBusinessCard, deneyColumns);

这里是控制表格的参考函数

         public  static  void SetColumns(DataGridView dataGridView,  string[] columns)

        {

             for ( int i = dataGridView.Columns.Count -  1; i >  0; i--)

            {

                 if (dataGridView.Columns[i].DataPropertyName.Equals( " Selected "))

                {

                     break;

                }

                 if (!BaseBusinessLogic.Exists(columns, dataGridView.Columns[i].DataPropertyName))

                {

                    dataGridView.Columns.RemoveAt(i);

                }

            }

        }

         public  static  void SetEditColumns(DataGridView dataGridView,  string[] columns)

        {

             for ( int i =  0; i < dataGridView.Columns.Count; i++)

            {

                 if (BaseBusinessLogic.Exists(columns, dataGridView.Columns[i].DataPropertyName))

                {

                    dataGridView.Columns[i].ReadOnly =  false;

                    dataGridView.Columns[i].DefaultCellStyle.BackColor = Color.FromArgb( 255,  255,  128);

                }

            }

        }

         public  static  void RemoveColumns(DataGridView dataGridView,  string[] columns)

        {

             for ( int i = dataGridView.Columns.Count- 1; i > 0 ; i--)

            {

                 if (BaseBusinessLogic.Exists(columns, dataGridView.Columns[i].DataPropertyName))

                {

                    dataGridView.Columns.RemoveAt(i);

                }

            }

        }

我们想顺利的实现数据字段的权限,需要进行一下系统性的步骤:

1:首先需要用数据库模型设计工具设计好数据库结构中表结构,需要注意一些常用的关键字字段。

通用权限管理系统组件 (GPM - General Permissions Manager) 中实现数据列的权限,附源码...

2:下图是每个字段的注释,这些注释可以在设置表字段权限时会派上大用处,不用反复输入基础数据了。

通用权限管理系统组件 (GPM - General Permissions Manager) 中实现数据列的权限,附源码...

3:我们用代码生成器,进行相关的代码,基础配置数据的生成工作。

通用权限管理系统组件 (GPM - General Permissions Manager) 中实现数据列的权限,附源码...

3:可以用代码生成器工具直接生成基础数据权限设置的功能,可以节省人工设置的烦恼。

通用权限管理系统组件 (GPM - General Permissions Manager) 中实现数据列的权限,附源码...

4:运行相关自动生成脚本的效果如下:

通用权限管理系统组件 (GPM - General Permissions Manager) 中实现数据列的权限,附源码...

5:我们用超级管理员,登录系统进行相关的配置

通用权限管理系统组件 (GPM - General Permissions Manager) 中实现数据列的权限,附源码...

6:我们设置用户的表字段权限

通用权限管理系统组件 (GPM - General Permissions Manager) 中实现数据列的权限,附源码...

7:超级管理员可以设置 “公开”列的配置, 然后可以给用户配置相关的数据列权限了。

通用权限管理系统组件 (GPM - General Permissions Manager) 中实现数据列的权限,附源码...

8:我们可以在获取数据的底层函数里,直接过滤有访问权限的字段,把没有访问权限的字段,直接在底层就进行移除掉,这样系统的安全性会非常高了,可以满足安全要求非常高的信息系统的要求。

通用权限管理系统组件 (GPM - General Permissions Manager) 中实现数据列的权限,附源码...

文章头部的几个与字段权限有关的函数主要是处理界面效果用的,上图主要是在功能函数的底层直接就把没权限访问的字段排除掉了。

字段权限:

   a: 页面上的字段权限实现。

   b: 直接在底层就实现字段权限,把数据在底层进行进行筛选处理。

希望以上实现的思路,可以起一些参考意义。

将权限管理、工作流管理做到我能力的极致,一个人只能做好那么很少的几件事情。

通用权限管理系统组件 (GPM - General Permissions Manager) 中实现数据列的权限,附源码...

通用信息化建设平台

关注 - 177

粉丝 - 1229 荣誉: 推荐博客 +加关注 6 1 (请您对文章做出评价) « 博主前一篇: 通用权限管理系统组件 (GPM - General Permissions Manager) 中实现统一身份认证(Single Sign On,单点登录)附源码

» 博主后一篇: C# NameValueCollection

通用权限管理系统组件 (GPM - General Permissions Manager) 中实现数据列的权限,附源码...
  • Categories: [01] 通用权限管理

Add your comment

5 条回复

  1. #1楼 xuefly      2012-02-06 22:41
    弄死方舟子,弄死周立波,一个人只能做好那么很少的几件事情。   回复  引用  查看   
  2. #2楼 卡啊可下[未注册用户]2012-02-07 08:30

    @xuefly

    这人 傻B 疯了?   回复  引用   

  3. #3楼 wy24420      2012-02-07 08:43
    有空学习,感谢楼主   回复  引用  查看   
  4. #4楼 游客111111111111111[未注册用户]2012-02-07 10:14
    想问楼主一个问题:如果编辑方式是在一个窗体内进行新增编辑,而不是在网格内直接新增编辑,这样怎么去动态控制(隐藏或显示)那些控件   回复  引用   
  5. #5楼 有一点难      2012-02-07 11:18
    非常不错。继续学习研究中。   回复  引用  查看   

  刷新评论列表 刷新页面 返回顶部 注册用户登录后才能发表评论,请  登录 或  注册, 访问网站首页。 程序员问答社区,解决您的IT难题 简洁阅读版式 网站首页 博问 新闻 闪存 程序员招聘 知识库  

最新IT新闻

:

·  微软诺基亚联盟之困

·  Chrome浏览器全球份额首次超过IE 仅保持一天

·  CSDN就网站被黑案告破发表声明

·  开发者应该关注的五项Web新兴技术:WebGL和SVG名列其中

·  分析称苹果应当收购Twitter 强化社交元素

»  更多新闻...

最新知识库文章

:

·  如何编写优质的需求文档

·  版本控制工具历史的10个里程碑

·  如何成为一名优秀的C程序员

·  效率由心生,快速提高工作效率秘诀

·  文学与编程

  »  更多知识库文章...

通用权限管理系统组件 (GPM - General Permissions Manager) 中实现数据列的权限,附源码...

China-pub 2011秋季教材巡展

China-Pub 计算机绝版图书按需印刷服务

    本文转自jirigala_bao 51CTO博客,原文链接:http://blog.51cto.com/jirigala/813083