RedGlove 权限管理系统(2)-功能模块设计

时间:2022-08-26 22:19:08

   在RedGlove Permission中,功能模块配置是不可缺少的一部份,先让我们来了解一个模块中所需要的元素:

元素名称

说明

ID

这个是必须,也是唯一的

Name

显示在UI上的名称,不能为空

PID

上级ID,可以进行多级处理,默认为0,0为*记录

Depth

记录的层次深度,默认为0,0为*记录

Order

排序,想控制显示顺序还是加上吧

Count

统计子集的总数,可不要

Tag

这个是权限认证的标识,可为空,如果存在则要唯一

URL

WEB功能模块的地址, 可为空

FormName

Win Form的名称,与URL作用是一样, 可为空

Disabled

模块是否启用,默认为true

IsMenu

是否显示到菜单上,默认为true

Description

描述,可不要

    建立这样的表结构,我们就可以配置出无级的功能模块管理,这样的表结构是单表设计,也可将它分离,就在网上的RedGlove Permission中一样,分类一个表,功能模块一个表,现在我们先用单表结构讲述吧,在下一个版本中,我准备将模块管理缩成单个表,现在我们看一下详细设计,模块分类的管理,在表中用到ID, Name, PID, Depth, Order, Count, Description就够了,其它的都是给模块用的,查询出来的时候,我们只要用递归就能很容易的将数据读出来,下面就是一段读取无级分类的代码

protected void bind()
{

      RGP.BLL.Modules bll = new RGP.BLL. Modules ();

      DataView dvList = new DataView(bll.GetModuleList("ModuleTag=’’").Tables[0]);

      LoadModuleList("0", 0, dvList);

}

/// <summary>
/// 加载模块分类
/// </summary>
/// <param name="ModulePID">分类上级ID</param>
/// <param name="Depth">分类级别深度</param>
protected void LoadModuleList(string UG_TID, int Depth,DataView dvList)
{
   
dvList.RowFilter = "ModuleSuperiorID=" + UG_TID;  //过滤父节点 
    foreach (DataRowView dv in dvList)
    {
        string depth = string.Empty;
        for (int i = 0; i < Depth; i++)
        {
           
depth = depth + "-";
        }
       
ModuleList.Items.Add(new ListItem(depth + dv["ModuleName"].ToString(), dv["ModuleID"].ToString()));
       
//递归 
       
LoadModuleList(dv["ModuleID"].ToString(), int.Parse(dv["ModuleDepth"].ToString()) + 1, dvList);  
   
}
}

功能中使用的方法:

方法名

说明

CreateModuleType()

创建模块分类

UpdateModuleType()

修改模块分类

DeleteModuleType()

删除模块分类

GetModuleTypeModel()

获取一条分类的详细信息

GetModuleTypeList()

获取模块分类列表

CreateModule()

创建模块,创建的同时,也将加入权限

UpdateModule()

修改模块

DeleteModule()

删除模块

ModuleTagExists()

判断模块标签是否已经存在

GetModuleModel()

获取一条分类的详细信息

GetModuleList()

获取模块列表

GetModules()

获取分类和模块列表

其它方法

SetName()

修改名称

SetDescription()

修改描述

SetDisabled()

设置是否启用功能模块

SetIsMenu()

设置是否显示到菜单

GetModuleDepth()

获取分类/模块的深度

GetModuleCount()

获取分类下的子集

 

    上面已经完成了模块的配置,但功能模块要参与权限管制,就得为这些模块添加相应的权限,下面我还得继续权限列表的设计。

元素名称

说明

ID

这个是必须,也是唯一的

ModuleID

对应模块的ID

AuthorityTag

权限标识,这个是对应权限标字典的数据,如浏览权限为RGP_BROWSE

    功能模块的权限采用竖向表设计,这样,可以添加多个权限,功能模块的权限管理中使用的方法如下:

方法名

说明

CreateAuthorityList()

创建模块权限列表

UpdateAuthorityList()

修改模块权限列表,修改的时候,必须判断传入的是新增还是取消权限,如果是取消,将删除模块对应该的权限,还有角色,用户拥有的该模块权限

DeleteAuthorityList()

删除模块权限列表,删除模块对应该的权限,还有角色,用户拥有的该模块权限

GetAuthorityList()

获取一条分类的详细信息