冯 海

一个程序新人菜鸟的日记,希望大家多多关照。QQ:32316131

bootstrap adminlte教程3:实现菜单权限管理菜单树

首先identity就有权限控制,可我们要让不同的人登录进后台,能看见不同的菜单。有没有权限操作是一个,看不看得见是另一个要求。

 一、模型设计:

1.先建 Menu模弄,在Models下新建Menu.cs 模型。

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;

namespace jsdhh2.Models
{
	public class Menu
	{
		/// <summary>
		/// 菜单ID
		/// </summary>
		[Display(Name = "菜单id")]
		public string Id { get; set; }

		/// <summary>
		/// 上级ID
		/// </summary>
		[Display(Name = "上级菜单Id")]
		public string ParentId { get; set; }

	

		/// <summary>
		/// 名称
		/// </summary>
		[Display(Name = "菜单名称")]
		 public string Name { get; set; }

		/// <summary>
		/// URL
		/// </summary>
		[Display(Name = "菜单网址")]
	 
		public string Url { get; set; }

		/// <summary>
		/// 排序越大越靠后
		/// </summary>
		[Display(Name = "排序数字")]
		public int Order { get; set; }

		/// <summary>
		/// 菜单类型,后其比如是1为菜单,2为按钮,3为模块,这样来。提前考虑。
		/// </summary>

		[Display(Name = "类型")]                   

		public string MenuType { get; set; }

		/// <summary>
		/// 这个地方,是为了更好接轨adminlte,以后可以在这输入你自己的class,达到LI样式的变化
		/// </summary>
		/// 
		[Display(Name = "菜单样式")]
		public string MenuCss { get; set; }
                  /// <summary>
		/// 这个地方,就是为了达到显示LI菜单前的图标的作用。
		/// </summary>
		[Display(Name = "菜单图标")]
public string MenuIcon { get; set; }


/// <summary>
/// 菜单后面的samall,对应adminlte看,主要为了后期增加个性化菜单使用。
///</summary>
[Display(Name = "小标样式")]
public string MenuSmallCss{ get; set; }

[Display(Name = "小标内容")]
public string MenuSmallValue { get; set; }
public string Code { get; set; } } }

  

2.再新建一个MenuRole模型,就是角色对应的菜单模型。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;
namespace jsdhh2.Models
{
	public class MenuRole
	{

[Key]
public int Id { get; set; }

		/// <summary>
		/// 菜单ID作引
		/// </summary>
		public string MenuId { get; set; }


		/// <summary>
		/// 角色名字
		/// </summary>
		public string RoleName { get; set; }


	}
}

  

在这,我没有象其他人一样使用roleId来,而是直接使用了roleName 字段哩,原因我是新手菜鸟,我好多地方都 引用了roleName的Session,我随时可以用当前RoleName进行与表查询,不用再读Role表了,同时我觉得写的时候 方便。

3.建立上下文。

在DAL文件夹下,新建一个:OaDALContent.cs的上下文

using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Web;
using jsdhh2.Models;

namespace jsdhh2.DAL
{
	public class OaDALContent : DbContext
	{
		public OaDALContent() : base("MyOaContent") { }
		public DbSet<Menu> Menus { get; set; }

		public DbSet<MenuRole> MenuRoles { get; set; }
	}


}

然后准备first code了。

先生成一次解决方案。

然后点上面调测按钮。

调测,使用用户名登录,晕,数据库中竟然 没有新增表,看来得先建控制器才能达到FIRTST CODE了。

 

4.新建一个控制器,我要使用异步的,同时是基架好的,难得麻烦,他会帮我生成我要的编辑呀之类的菜单,直接新建一个Menu控制器。

 

 

 

然后我们再重新生成解决方案

再调测。

登录系统 后,我们再在地址栏中改一下:

http://localhost:55850/Menus/index  回车,强制他访问一下。

 

然后我们进数据库看一下。

 

看见了,果然成功first code,我们会发现Menus视图下,自动生成了详细,编辑,新建,删除等功能,就简单多了,对于新手来说

 我们先建一个一级菜单:系统设置。(这是为了SuperAdmin来设计的,主要是实现一些系统 的权限设置)

我们会发现我们新建失败,思考一下,肯定是ID为字符串,要GUID,所以得改一下模型和控制器代码。

我没有用GUID,我是使用将时间设为STRIN,作为主键 的方式。更改后,在Create视图中,删除ID的输入框,控制器代码如下

  // POST: Menus/Create
        // 为了防止“过多发布”攻击,请启用要绑定到的特定属性,有关 
        // 详细信息,请参阅 https://go.microsoft.com/fwlink/?LinkId=317598。
        [HttpPost]
        [ValidateAntiForgeryToken]
        public async Task<ActionResult> Create([Bind(Include = "ParentId,Name,Url,Order,MenuType,MenuCss,MenuIcon,MenuSmallCss,MenuSmallValue,Code")] Menu menu)
        {
			DateTime dt = DateTime.Now; 
			string str = dt.ToString("yyyyMMddHHmmss");     //设置ID的样式。
			menu.Id = str;   //给模型赋值。

			if (ModelState.IsValid)
            {			

				db.Menus.Add(menu);
                await db.SaveChangesAsync();
                return RedirectToAction("Index");
            }

            return View(menu);
        }

  

添加测试成功:

 

posted @ 2017-05-21 21:48  秋天来了哟  阅读(1356)  评论(0编辑  收藏  举报
认识就是缘份,愿天下人都快乐!
QQ: 32316131
Email: 32316131@qq.com