Winform控制权限到按钮级别

前言:其实在基于一些简单的系统的时候时候,很多权限都是控制到页面级别的;但是业务只要稍微复杂一点,系统就很难满足的问题,比如同一个页面需要不同的人点击不同的按钮(审批等操作)。这个时候就需要把权限放到按钮层面来控制。下面主要还是从客户端的角度来实现,具体的权限配置数据等是放到服务端的。所以假设已经获取到了用户的权限数据,并且这个数据是配置到按钮级别的。.

    以下通过自定义控件的方式实现,简单易用;

  1. 创建用户控件,即绘制自己的按钮,也可以直接继承自Button,但是如果需要美观一点,比如要做圆角等,还是需要自己绘制。

  2. 在系统内所有需要控制权限的按钮采用此控件(除了登录页,基本都用就行了)。

  3. 后台需要配置的数据格式:namespace.form.button,即页面的命名空间+页面的名称+按钮的名称

  4. 重写OnLoad事件,在此事件中对按钮禁用或者启用

  protected override void OnLoad(EventArgs e)        {            base.OnLoad(e);            if (GlobalData.UserButtons != null)            {                Control form = Parent;                for (int i = 0; i < 10; i++)                {                    if (form == null) return;                    if (form is BaseForm)                    {                        break;                    }                    else                    {                        form = form.Parent;                    }                }                string btnName = form.GetType().FullName + "." + Name;                if (ignoreBtnText.Contains(BtnText) || GlobalData.UserButtons.Exists(s => s.Path == btnName))                {                    Visible = true;                }                else                {                    Visible = false;                }            }        }
  1. 以上GlobalData.UserButtons就是系统登录后,存储的用户的按钮权限数据,这里是只有配置了才会对按钮进行显示,否则进行隐藏(也可以设置禁用等属性)。

  2. 以上是简单的实现方式,深层次还应该屏蔽代码中的Visible属性设置(比如万一在代码中又对这个按钮进行了启用,可以用Visible改变事件控制,也可以从编码规范等方向规避;),同时也应考虑后端接口是否也需要根据权限对接口施加控制等