Asp.Net MVC+BootStrap+EF6.0实现简单的用户角色权限管理1

首先给上项目的整体框架图:,这里我没有使用BLL,因为感觉太烦了就没有去使用。

那么接下来我们首先先去Model层中添加Model。

管理员类:

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace AuthorDesign.Model {
    /// <summary>
    /// 管理员
    /// </summary>
    public class Admin {
        /// <summary>
        /// 管理员ID(主键)
        /// </summary>
        [Key]
        public int Id { get; set; }
        /// <summary>
        /// 用户名
        /// </summary>
        [StringLength(30)]
        [Column(TypeName="varchar")]
        public string AdminName { get; set; }
        /// <summary>
        /// 手机号码
        /// </summary>
        [StringLength(11)]
        [Column(TypeName = "varchar")]
        public string Mobile { get; set; }
        /// <summary>
        /// 邮箱
        /// </summary>
        [StringLength(100)]
        [Column(TypeName = "varchar")]
        public string Email { get; set; }
        /// <summary>
        /// 密码
        /// </summary>
        [StringLength(120)]
        [Column(TypeName = "varchar")]
        public string Password { get; set; }
        /// <summary>
        /// 密码盐值
        /// </summary>
        [StringLength(10)]
        [Column(TypeName = "varchar")]
        public string Salt { get; set; }
        /// <summary>
        /// 对应角色Id
        /// </summary>
        public int AuthoryId { get; set; }
        /// <summary>
        /// 添加时间
        /// </summary>
        public DateTime CreateTime { get; set; }
        /// <summary>
        /// 是否超级管理员
        /// </summary>
        public Byte IsSuperAdmin { get; set; }
        /// <summary>
        /// 上次登录时间
        /// </summary>
        public DateTime LastLoginTime { get; set; }
        /// <summary>
        /// 上次登录地址
        /// </summary>
        [StringLength(50)]
        [Column(TypeName = "nvarchar")]
        public string LastLoginAddress { get; set; }
        /// <summary>
        /// 上次登录端口基本信息
        /// </summary>
        [StringLength(50)]
        [Column(TypeName = "varchar")]
        public string LastLoginInfo { get; set; }
        /// <summary>
        /// 上次登录Ip
        /// </summary>
        [StringLength(50)]
        [Column(TypeName = "varchar")]
        public string LastLoginIp { get; set; }
        public Admin(){
            CreateTime = DateTime.Now;
            LastLoginTime = DateTime.Now;
        }
    }
}

[Key]这个事用来设置主键的,[StringLength(30)]是用来控制在创建数据库的时候控制长度,[Column(TypeName="varchar")]是用来创建该字段在数据库中的类型。我在创建的时候没有使用外键,因本人对外键不熟所以没使用。Byte类型就相当于数据库的tinyint类型。

页面与页面动作联系表:

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace AuthorDesign.Model {
    /// <summary>
    /// 页面与页面动作联系表
    /// </summary>
    public class ActionToPage {
        /// <summary>
        /// 自增Id
        /// </summary>
        [Key]
        public int Id { get; set; }
        /// <summary>
        /// 页面Id
        /// </summary>
        public int PageId { get; set; }
        /// <summary>
        /// 动作集合(用json存储)
        /// </summary>
        [StringLength(300)]
        [Column(TypeName = "varchar")]
        public string ActionList { get; set; }
        /// <summary>
        /// 是否删除
        /// </summary>
        public Byte IsDelete { get; set; }
    }
}

管理员登录日志:

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace AuthorDesign.Model {
    /// <summary>
    /// 管理员登录日志
    /// </summary>
    public class AdminLoginLog {
        /// <summary>
        /// 管理员登录记录Id
        /// </summary>
        [Key]
        public int AdminLoginLogId { get; set; }
        /// <summary>
        /// 管理员Id
        /// </summary>
        public int AdminId { get; set; }
        /// <summary>
        /// 管理员登录地址
        /// </summary>
        [StringLength(50)]
        [Column(TypeName = "nvarchar")]
        public string AdminLoginAddress { get; set; }
        /// <summary>
        /// 管理员登录IP
        /// </summary>
        [StringLength(50)]
        [Column(TypeName = "varchar")]
        public string AdminLoginIP { get; set; }
        /// <summary>
        /// 管理员登录时间
        /// </summary>
        public DateTime AdminLoginTime { get; set; }
        /// <summary>
        /// 浏览器信息或者APP信息
        /// </summary>
        [Column(TypeName = "varchar")]
        [StringLength(50)]
        public string AdminLoginInfo { get; set; }
        public AdminLoginLog() {
            AdminLoginTime = DateTime.Now;
        }
    }
}

管理员操作类:

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace AuthorDesign.Model {
    /// <summary>
    /// 管理员操作类
    /// </summary>
    public class AdminOperation {
        [Key]
        public int AdminOperationId { get; set; }
        /// <summary>
        /// 管理员Id
        /// </summary>
        public int AdminId { get; set; }
        /// <summary>
        /// 权限Id
        /// </summary>
        public int AuthoryId { get; set; }
        /// <summary>
        /// 动作Id(1:增,2:修改,3:查看,4:删除)
        /// </summary>
        public int Action { get; set; }
        /// <summary>
        /// 操作标题
        /// </summary>
        [StringLength(15)]
        [Column(TypeName = "nvarchar")]
        public string Title { get; set; }
        /// <summary>
        /// 操作详情
        /// </summary>
        [StringLength(200)]
        [Column(TypeName = "nvarchar")]
        public string Content { get; set; }
        /// <summary>
        /// 操作IP
        /// </summary>
        [StringLength(50)]
        [Column(TypeName = "varchar")]
        public string OperateIP { get; set; }
        /// <summary>
        /// 操作地址
        /// </summary>
        [StringLength(50)]
        [Column(TypeName = "nvarchar")]
        public string OperateAddress { get; set; }
        /// <summary>
        /// 浏览器信息或者APP信息
        /// </summary>
        [StringLength(50)]
        [Column(TypeName = "varchar")]
        public string OperateInfo { get; set; }
        /// <summary>
        /// 创建时间
        /// </summary>
        public DateTime CreateTime { get; set; }
        public AdminOperation() {
            CreateTime = DateTime.Now;
        }
    }
}

用户与页面和页面动作联系表:

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace AuthorDesign.Model {
    /// <summary>
    /// 用户与页面和页面动作联系表
    /// </summary>
    public class AdminToPage {
        /// <summary>
        ///
        /// </summary>
        [Key]
        public int Id { get; set; }
        /// <summary>
        /// 管理员Id
        /// </summary>
        public int AdminId { get; set; }
        /// <summary>
        /// 页面Id
        /// </summary>
        public int PageId { get; set; }
        /// <summary>
        /// 动作集合(用json存储)
        /// </summary>
        [StringLength(300)]
        [Column(TypeName = "varchar")]
        public string ActionList { get; set; }
        /// <summary>
        /// 是否显示
        /// </summary>
        public Byte IsShow { get; set; }
        /// <summary>
        /// 是否删除
        /// </summary>
        public Byte IsDelete { get; set; }
    }
}

角色:

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace AuthorDesign.Model {
    /// <summary>
    /// 角色
    /// </summary>
    public class Authory {
        /// <summary>
        /// 角色Id
        /// </summary>
        [Key]
        public int Id { get; set; }
        /// <summary>
        /// 角色名称
        /// </summary>
        [StringLength(15)]
        [Column(TypeName = "varchar")]
        public string Name { get; set; }
        /// <summary>
        /// 角色简介
        /// </summary>
        [StringLength(30)]
        [Column(TypeName = "varchar")]
        public string Intro { get; set; }
        /// <summary>
        /// 角色状态(0:正常;1:已删除)
        /// </summary>
        public Byte State { get; set; }
    }
}

角色与页面和页面动作之间联系:

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace AuthorDesign.Model {
    /// <summary>
    /// 角色与页面和页面动作之间联系
    /// </summary>
    public class AuthoryToPage {
        /// <summary>
        /// 自增Id
        /// </summary>
        [Key]
        public int Id { get; set; }
        /// <summary>
        /// 权限Id
        /// </summary>
        public int AuthoryId { get; set; }
        /// <summary>
        /// 页面Id
        /// </summary>
        public int PageId { get; set; }
        /// <summary>
        /// 动作集合(用json存储)
        /// </summary>
        [StringLength(300)]
        [Column(TypeName = "varchar")]
        public string ActionList { get; set; }
        /// <summary>
        /// 是否显示
        /// </summary>
        public Byte IsShow { get; set; }
        /// <summary>
        /// 是否删除
        /// </summary>
        public Byte IsDelete { get; set; }
    }
}

页面动作:

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace AuthorDesign.Model {
    /// <summary>
    /// 页面动作
    /// </summary>
    public class PageAction {
        /// <summary>
        /// 动作Id
        /// </summary>
        [Key]
        public int Id { get; set; }
        /// <summary>
        /// 动作名称
        /// </summary>
        [StringLength(15)]
        [Column(TypeName = "varchar")]
        public string Name { get; set; }
        /// <summary>
        /// 动作代码(页面代码)
        /// </summary>
        [StringLength(35)]
        [Column(TypeName = "varchar")]
        public string ActionCode { get; set; }
        /// <summary>
        /// 是否显示
        /// </summary>
        public Byte IsShow { get; set; }
        /// <summary>
        /// 动作等级
        /// </summary>
        public Byte ActionLevel { get; set; }
    }
}

页面:

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace AuthorDesign.Model {
    /// <summary>
    /// 页面
    /// </summary>
    public class PageMenu {
        /// <summary>
        ///
        /// </summary>
        [Key]
        public int Id { get; set; }
        /// <summary>
        /// 页面Id
        /// </summary>
        public int PId { get; set; }
        /// <summary>
        /// 页面名称
        /// </summary>
        [StringLength(15)]
        [Column(TypeName = "varchar")]
        public string Name { get; set; }
        /// <summary>
        /// 页面路径
        /// </summary>
        [StringLength(50)]
        [Column(TypeName = "varchar")]
        public string PageUrl { get; set; }
        /// <summary>
        /// 是否显示
        /// </summary>
        public byte IsShow { get; set; }
        /// <summary>
        /// 排序
        /// </summary>
        public int OrderNum { get; set; }
        /// <summary>
        /// 页面图标
        /// </summary>
        [StringLength(30)]
        [Column(TypeName = "varchar")]
        public string Ico { get; set; }
    }
}

以上就是Model了。

下面的是对基础仓储的编辑(也就是DAL):

首先安装下EF,选择6.0安装即可

首先是DbContext:这是EF与数据库连接的上下文。

using AuthorDesign.Model;
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace AuthorDesign.DAL {
    public class AuthorDesignContext : DbContext {
        public AuthorDesignContext()
            : base("AuthorDesignContext") {
        }

        public DbSet<ActionToPage> ActionToPages { get; set; }
        public DbSet<Admin> Admins { get; set; }
        public DbSet<AdminLoginLog> AdminLoginLogs { get; set; }
        public DbSet<AdminOperationRepository> AdminOperations { get; set; }
        public DbSet<AdminToPage> AdminToPages { get; set; }
        public DbSet<Authory> Authories { get; set; }
        public DbSet<AuthoryToPage> AuthoryToPages { get; set; }
        public DbSet<PageAction> PageActions { get; set; }
        public DbSet<PageMenu> PageMenus { get; set; }
    }
}

感觉类有点多,下篇继续写关于DAL的,这里一些都是简单的代码。可能本人写的不好,各位看官要是那里可以改进的或者那里有疑问的可以问我。

这里是源码下载地址:https://github.com/yjqGitHub/AuthorDesign 我会把源码都更新上去的

时间: 2024-10-11 09:11:25

Asp.Net MVC+BootStrap+EF6.0实现简单的用户角色权限管理1的相关文章

Asp.Net MVC+BootStrap+EF6.0实现简单的用户角色权限管理

这是本人第一次写,写的不好的地方还忘包含.写这个的主要原因是翔通过这个来学习下EF的CodeFirst模式,本来也想用AngularJs来玩玩的,但是自己只会普通的绑定,对指令这些不是很熟悉,所以就基本不用了.还有最主要的原因就是锻炼下自己的能力.好了其他就不多说了,下面来看下我对这个项目的整体概述吧: 目录: 目录我以后会在这边添加上去的 一.Asp.Net MVC+BootStrap+EF6.0实现简单的用户角色权限管理 基本设计 项目中使用到的工具: Visual Studio 2013,

Asp.Net MVC+BootStrap+EF6.0实现简单的用户角色权限管理10

今天把用户的菜单显示和页面的按钮显示都做好了,下面先来个效果图 接下来说下我实现的方法: 首先我在每个方法前面都加了这个属性, /// <summary> /// 表示当前Action请求为一个具体的功能页面 /// </summary> public class AdminActionMethod : Attribute { /// <summary> /// 页面请求路径 /// </summary> public string ActionUrl {

Asp.Net MVC+BootStrap+EF6.0实现简单的用户角色权限管理9

前两天因有事就没来得及写.今天刚刚好空了.这次写的是对角色和管理员对页面按钮之间的控制.先看页面效果 说明:先根据角色设置好角色的权限,然后管理员在对应的角色下的权限去设置其权限. 在设置角色权限的时候 当某个角色对应某个页面的按钮都是未选中的时候,则设置它的IsShow为0,反之则为1,这样有利于设置管理员的时候方便查询需要设置的页面. 当isshow为0的时候删除管理员表对应的该页面Id的记录. 角色和管理员页面按钮显示这块到这里就结束了. 百度网盘源码下载地址

Asp.Net MVC+BootStrap+EF6.0实现简单的用户角色权限管理6

接下来先做角色这一板块的(增删改查),首先要新建一个Role控制器,在添加一个RoleList的视图.表格打算采用的是bootstrap的表格. using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace AuthorDesign.Web.Areas.Admin.Controllers { public class Role

Asp.Net MVC+BootStrap+EF6.0实现简单的用户角色权限管理7

做完角色之后接下来做先做页面按钮的增加.删除.修改.这里用到的功能和角色那边是一样的.就不多说了.直接上代码. 后台控制器代码 using AuthorDesign.Web.App_Start.Common; using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace AuthorDesign.Web.Areas.Admin

Asp.Net MVC+BootStrap+EF6.0实现简单的用户角色权限管理2

首先我们来写个类进行获取当前线程内唯一的DbContext using System; using System.Collections.Generic; using System.Data.Entity; using System.Linq; using System.Runtime.Remoting.Messaging; using System.Text; using System.Threading.Tasks; namespace AuthorDesign.DAL { /// <sum

Asp.Net MVC+BootStrap+EF6.0实现简单的用户角色权限管理3

首先在webconfig中加入下面这句代码,这个主要是用来生成数据库的连接字符串 <connectionStrings> <add name="AuthorDesignContext" providerName="System.Data.SqlClient" connectionString="Data Source=.;Initial Catalog=AuthorDesign;Integrated Security=False;User

ASP.NET MVC使用Bootstrap系列(5)——创建ASP.NET MVC Bootstrap Helpers

序言 ASP.NET MVC允许开发者创建自定义的HTML Helpers,不管是使用静态方法还是扩展方法.一个HTML Helper本质上其实是输出一段HTML字符串. HTML Helpers能让我们在多个页面上公用同一段HTML标记,这样不仅提高了稳定性也便于开发者去维护.当然对于这些可重用的代码,开发者也方便对他们进行单元测试.所以,创建ASP.NET MVC Bootstrap Helpers是及其有必要的. 内置的HTML Helpers ASP.NET MVC内置了若干标准HTML

ASP.NET MVC Bootstrap极速开发框架

前言 每次新开发项目都要从头开始设计?有木有一个通用的快速开发框架?并且得是ASP.NET MVC  And Bootstrap?数据库不要手工创建?框架对未来业务支持的扩展性好?这么简单的功能还需要一天搭建基础环境?能不能只关心我所需要的业务? 有这样的一个项目,基于ASP.NET MVC.EntityFramework.Memcached.Bootstrap的快速项目开发框架,只需3秒钟即可创建一个带有简单用户管理的项目. 一键安装 懒人一键安装包下载地址,双击“install.bat”批处