FineUI 官方论坛

标题: 让权限控制更简单些,粒度更细,代码更少 [打印本页]

作者: yimi00    时间: 2014-2-19 15:50
标题: 让权限控制更简单些,粒度更细,代码更少
本帖最后由 yimi00 于 2014-2-19 15:53 编辑

去年上手fineui后一直在想怎么控制权限,购买了appbox后发现看不懂(个人水平问题),后来通过奋战,任督二脉打通了,跟大家分享一下,高手勿笑,只是简单的权限控制。
控制粒度:以控件为单位,包括grid的列,treeNode等
控制功能:可视,可操作性
实现方法:把每个页面需要控制的控件做记录,然后控件分组,可交叉分组,如A控件可在管理员组,也可以在技术员组
实现流程:
加载页面初始化--从数据库读取登陆人员所在组和所在页面的控件列表--对控件进行可视、可操作的属性设置从而达到控制要求。
提供一些控制控件属性的代码
目前正在调整代码,看看兄弟反应,有必要的就上传一个空项目。
//设置按钮的
protected void PowerButton(object controlName)
        {
            object o = this.GetType().GetField(controlName.ToString(), System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.IgnoreCase).GetValue(this);
            ((FineUI.Button)o).Enabled = false;
        }
//设置grid列的
        protected void PowerGridBoundField(object controlName)
        {
            object o = this.GetType().GetField(controlName.ToString(), System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.IgnoreCase).GetValue(this);
            ((FineUI.BoundField)o).Hidden = true;
        }
//设置GridWindowField的
        protected void PowerGridWindowField(object controlName)
        {
            object o = this.GetType().GetField(controlName.ToString(), System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.IgnoreCase).GetValue(this);
            ((FineUI.WindowField)o).Enabled = false;
        }
设置Grid普通列的
        protected void PowerGrid(object controlName)
        {
            object o = this.GetType().GetField(controlName.ToString(), System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.IgnoreCase).GetValue(this);
            FineUI.Grid g = (FineUI.Grid)o;
            //g.FindColumn();
            g.Columns[1].Hidden = true;
        }
//设置TextBox的
        protected void PowerTextBox(object controlName)
        {
            object o = this.GetType().GetField(controlName.ToString(), System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.IgnoreCase).GetValue(this);
            FineUI.Grid g = (FineUI.Grid)o;
            g.Columns[1].Hidden = true;
        }

只需要三个表,在PageBase中加入几段代码即可实现权限控制。然后在每个需要控制的界面继承PageBase


作者: 狐狸猫    时间: 2014-2-19 16:19
顶一下  好文 传一个demo好一些
作者: 小兔乱闯    时间: 2014-2-19 17:16
要看看啊,学习学习
作者: szjazz    时间: 2014-2-20 01:17
本人非常感兴趣!也正努力做到这一点:
页面(功能模块)的相应操作权限控制,通过对按钮这一控件的权限来实现

作者: Min    时间: 2014-2-20 14:48
有实际用例么,现在我是通过一系列得权限配置去实现。




欢迎光临 FineUI 官方论坛 (https://fineui.com/BBS/) Powered by Discuz! X3.4