苏飞论坛

标题: 【通用权限管理系统】菜单管理三层处理 [打印本页]

作者: 范范    时间: 2017-12-8 20:32
标题: 【通用权限管理系统】菜单管理三层处理
【通用权限管理系统】菜单管理三层处理



导读部分



购买http://www.sufeinet.com/thread-19360-1-1.html
讨论区http://www.sufeinet.com/forum-181-1.html
教程目录http://www.sufeinet.com/thread-19363-1-1.html


教程部分


菜单管理,是整个权限管理中最基本,也是最重要的部分,只有此处跟用户管理部分存在,才能继续权限管理的其它部分处理
下面就主要说下三层的处理
注: 本系统是基于论坛的分布式框架进行开发的,也可以说是分布式框架的一个使用范例哈,如果已经非常了解分布式框架的,可以跳过此教程,看其他内容

1. Model层
[C#] 纯文本查看 复制代码
/// <summary>
    /// 菜单信息  实体类
    /// </summary>
    public class Sys_MenuInfo {
        /// <summary>
        /// id
        /// </summary>               
        public int MenuID { get; set; }
        /// <summary>
        /// 父菜单id
        /// </summary>               
        public int ParentID { get; set; }
        /// <summary>
        /// 菜单深度信息(主要用在2层以上的菜单使用)
        /// </summary>
        public int Depth { get; set; }
        /// <summary>
        /// 菜单名称
        /// </summary>               
        public string MenuName { get; set; }
        /// <summary>
        /// 链接地址
        /// </summary>               
        public string LinkUrl { get; set; }
        /// <summary>
        /// 排序值
        /// </summary>               
        public int OrderID { get; set; }

    }

此处内容中所有的字段与数据库中的字段完全一致(字段数量与字段的名称,大小写)

主要存在字段,菜单id,菜单名称,链接地址,深度(为几级菜单的意思),父级菜单id,排序值

作者: 范范    时间: 2017-12-8 20:45
2. DAL层,主要处理与数据库互动方面的内容
集成了分布式框架,故在此dal中可以看到,继承了分布式框架的BaseDAL,如下所示:

[C#] 纯文本查看 复制代码
 public partial class Sys_MenuDAL : BaseDAL<Sys_MenuInfo> {
}



此cs中所有方法解读如下:
1.
[C#] 纯文本查看 复制代码
protected override string ConnName {
            get { return DbConfig.PurviewConnection; }
        }


数据库链接字符串添加


2.
[C#] 纯文本查看 复制代码
protected override Sys_MenuInfo FillModelFromReader(System.Data.Common.DbDataReader reader, params string[] fields) {
            return ModelFromReader( reader, fields );
        }

        protected Sys_MenuInfo ModelFromReader(System.Data.Common.DbDataReader reader, params string[] fields) {
            var info = new Sys_MenuInfo();
            if ( UtilDAL.HasFields( "MenuID", fields ) ) { info.MenuID = ( int ) reader[ "MenuID" ]; }
            if (UtilDAL.HasFields("ParentID", fields)) { info.ParentID = (int)reader["ParentID"]; }
            if (UtilDAL.HasFields("Depth", fields)) { info.Depth = (int)reader["Depth"]; }
            if ( UtilDAL.HasFields( "MenuName", fields ) ) { info.MenuName = reader[ "MenuName" ].ToString(); }
            if ( UtilDAL.HasFields( "LinkUrl", fields ) ) { info.LinkUrl = reader[ "LinkUrl" ].ToString(); }
            if ( UtilDAL.HasFields( "OrderID", fields ) ) { info.OrderID = ( int ) reader[ "OrderID" ]; }

            return info;
        }


此两个方法,是分布式框架中的重点,里面的字段信息,一定要去数据库字段信息完全一致,否则可能会出现获取不到数据的情况


3.
[C#] 纯文本查看 复制代码
 public List<Sys_MenuInfo> GetList(string fields, string query, string orderby, int pageIndex, int pageSize, out int totalCount) {
            return FindPage( "Sys_Menu", fields, query, orderby, pageIndex, pageSize, out totalCount );
        }

        public List<Sys_MenuInfo> GetList(string fields, string query, string orderBy) {
            if ( string.IsNullOrWhiteSpace( fields ) ) { fields = "*"; }
            if ( string.IsNullOrWhiteSpace( query ) ) { query = "1 = 1"; }
            if ( string.IsNullOrWhiteSpace( orderBy ) ) { orderBy = "MenuID"; }

            string sql = string.Format( "SELECT {0} FROM dbo.Sys_Menu WHERE {1} ORDER BY {2}", fields, query, orderBy );

            return FindList( sql );
        }

获取列表数据,第一个是获取分页列表,第2个是根据查询方式,获取所有列表数据
4.
[C#] 纯文本查看 复制代码
public Sys_MenuInfo GetInfo(string fields, string query) {
            if ( string.IsNullOrWhiteSpace( fields ) ) { fields = "*"; }
            if ( string.IsNullOrWhiteSpace( query ) ) { query = "1=1"; }

            string sql = string.Format( "SELECT {0} FROM dbo.Sys_Menu WHERE {1}", fields, query );

            return FindOne( sql );
        }


获取单个实体  根据查询条件



作者: 范范    时间: 2017-12-8 20:53
(, 下载次数: 86)