zoukankan      html  css  js  c++  java
  • RedGlove 权限管理系统(2)功能模块设计

       在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()

    获取一条分类的详细信息


    作者:Neo.Yan
    出处:http://www.cnblogs.com/Nick4/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
    欢迎大家访问我的网站-RedGlove.NET

    软件团队管理QQ交流群:124388576,欢迎对软件团队管理有兴趣的朋友加入

  • 相关阅读:
    JQ库函数记忆要点
    PHP运算符:算数运算符、逻辑运算符、三目运算符、位运算符、字符串运算符。
    ThinkPHP函数详解:F方法(快速缓存方法)
    AndroidStudio项目提交(更新)到github最详细步骤
    git项目管理及fatal: remote origin already exists.解决方法
    git项目管理及fatal: remote origin already exists.解决方法
    git分支(存在意义和使用方法)
    RecyclerView
    Git Windows版本
    chmod 777 -R on existing path getting chmod: -R: No such ...
  • 原文地址:https://www.cnblogs.com/nick4/p/1440339.html
Copyright © 2011-2022 走看看