天天看点

【权限的思考】(一)使用反射实现动态权限

  每一个业务系统都会根据业务需要配置各种各样的权限,实现方式也是千差万别,各有各的优缺点。今天我们

利用反射来做一个小的权限管理Demo。也可以说是插件化的权限管理,通用的插件化框架是实现一个接口或者协定,

我们的做法是先展示指定的数据,再去动态的加载需要用到的dll和功能。

  大致的思路是这样的,我们从服务或者从数据库里读取哪些dll需要加载,相应的dll下哪些页面可以调用。把这些内容

动态的添加到页面上,当点击页面上的元素时利用反射,匹配目录下的dll和dll内的页面,进行读取,并显示进行交互,

从面实现插件化动态加载内容。如下图所示:

     例:

【权限的思考】(一)使用反射实现动态权限

      再添加3个类库ReflectionPermissionDemo.A;ReflectionPermissionDemo.B;ReflectionPermissionDemo.C;

需要注意的是不要在ReflectionPermissionDemo引用后边新建好的3个类库。我们的目标是用反射去加载这些dll库,

而不是使用引用方式。

【权限的思考】(一)使用反射实现动态权限

创建完后还需要修改他们的输出路径属性

ReflectionPermissionDemo就生成到bin目录下

其它ReflectionPermissionDemo.A;ReflectionPermissionDemo.B;ReflectionPermissionDemo.C三个都指向这个

目录下生成。这样的目的是让所有的dll都在同一个文件夹下。

【权限的思考】(一)使用反射实现动态权限
【权限的思考】(一)使用反射实现动态权限

  ReflectionPermissionDemo项目里修改一下页面。在顶部添加一个Panel用来动态添加按钮,这些动态添加上的按钮就是我们利

用反射动态加载的dll库。在下边也添加一个Panel用于动态显示权限信息,对应是dll库里面有权限的页面。设置他们的

性Dock一个为Top下边的为Fill。并给他们命名上边的panelTop。叫下边的叫panelBody

【权限的思考】(一)使用反射实现动态权限

  在ReflectionPermissionDemo.A;ReflectionPermissionDemo.B;ReflectionPermissionDemo.C各自创建一些页面,这些页面也

需要权限设置的允许才能打开。

  在每个页面上放一个标识,标明这个窗体与其它的窗体不同,可以根据个人需要,我这里放的是label写了一些文字标明每个窗体是

哪个项目的哪个窗体,如下图:

【权限的思考】(一)使用反射实现动态权限
【权限的思考】(一)使用反射实现动态权限

  写一个单例类,创建一些权限数据,用于模拟从服务器上返回的数据。返回的数据有模块id,模块名称,命名空间和父id。

我们可以把这些数结构想像成一棵树结构。

 先整理一下思路。

1.读取模拟的权限数据。

2.根据权限数据组织页面元素

  》有哪些dll可以被加载

  》相应的dll内有哪些页面可以被调用

3.点击页面元素根据保存的数据利用反射把页面展示出来。

——————————————————

 >先添加一些字段。

>根据权限数据动态组织页面

> 利用点击不同的元素展示相应的页面

跑一下,看一下效果

【权限的思考】(一)使用反射实现动态权限

继续阅读