NET Core Pages+Bootstrap-一套完整权限系统

本文介绍了使用.NET Core构建一套完整的权限系统,包括通用权限处理、项目结构详细说明,如BBC_data、BBC_Service、BBC_Web和BBC_Api的职责划分。在数据层面,采用DB First模式,并通过Add-Scaffold-DbContext命令生成实体。在服务层封装了通用增删查改方法,在Web UI中应用Bootstrap进行页面显示,同时详细阐述了数据库逻辑的配置和连接字符串的注入。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通用权限

1、引入命名空间。
using Microsoft.EntityFrameworkCore;

项目结构

新建BBC解决方案。在解决方案下新建BBC_Api,BBC_data,BBC_Service,BBC_Web文件夹。
本次项目采用DB First模式,新建数据库后在包管理控制台下使用
Add:Scaffold-DbContext -Connection “连接字符串” Microsoft.EntityFrameworkCore.SqlServer -OutputDir "创建后放的文件夹"创建对应实体。
1、BBC_data文件夹下新建标准类库,命名Data。
一方面用来映射数据库实体,另一方面用来装在其他的实体,如View实体,逻辑映射实体等。
2、BBC_Service文件夹下新建标准类库,命名Service。
引用Data层,用来实现提供web的逻辑操作。
3、BBC_Web文件夹下新建Web项目,命名web。
引用Data层和Service层,用来实现对用户可视化展示。
4、BBC_Api文件夹下Api项目,命名Api。
引用Data层和Service层,对不同端提供数据接口。

BBC_data

1、新建一个Entity文件。
新建一个Entity文件夹用于存放表对应的实体属性
如图
在这里插入图片描述
2、新建DbContext文件。
新建BBCDbContext类,配置映射关系

namespace Data
{
	public class BBCDbContext: DbContext
	{
		public BBCDbContext(DbContextOptions<BBCDbContext> options) : base(options) { }

		public virtual DbSet<LogLogin> LogLogin { get; set; }
		public virtual DbSet<LogOperate> LogOperate { get; set; }
		public virtual DbSet<LogPage> LogPage { get; set; }
		public virtual DbSet<SysDictionary> SysDictionary { get; set; }
		public virtual DbSet<SysMenu> SysMenu { get; set; }
		public virtual DbSet<SysMenuRole> SysMenuRole { get; set; }
		public virtual DbSet<SysRole> SysRole { get; set; }
		public virtual DbSet<SysUser> SysUser { get; set; }
		public virtual DbSet<SysUserRole> SysUserRole { get; set; }
	}
}

用于实现数据库与项目实体映射桥梁。

BBC_Service

BBC_Web

1、配置数据库连接字符串。
appsettings.json

  "ConnectionStrings": {
    "BBC": "Server=.;uid=sunyong;pwd=1qaz!QAZ;Database=BBC;"
  }

2、将连接字符串注入到Starup.cs。
Startup.cs->ConfigureServices。在Starup.cs文件夹下面的ConfigureServices方法下面添加如下代码

//数据库连接映射
  		services.AddDbContext<BBCDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("BBC")));

BBC_Api

1、配置数据库连接字符串。
appsettings.json

  "ConnectionStrings": {
    "BBC": "Server=.;uid=sunyong;pwd=1qaz!QAZ;Database=BBC;"
  }

2、将连接字符串注入到Starup.cs。
Startup.cs->ConfigureServices在Starup.cs文件夹下面的ConfigureServices方法下面添加如下代码

//数据库连接映射
  		services.AddDbContext<BBCDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("BBC")));

封装通用方法

BBC_Service

1、新建BaseService文件夹。
ServiceCore.cs用于封装通用的增删查改的方法,用于整表操作。

namespace Service
{
	public class ServiceCore<T> where T : class, new()
	{
		private BBCDbContext db { get; set; }
		public ServiceCore(BBCDbContext _db) {
			db = _db;
		}
		public bool Add(T entity) {
			db.Set<T>().Add(entity);
			return db.SaveChanges() > 0;
		}
		public bool Remove(T entity) {
			db.Entry(entity).State = EntityState.Deleted;
			return db.SaveChanges() > 0;
		}
		public bool Update(T entity) {
			db.Entry(entity).State = EntityState.Modified;
			return db.SaveChanges() > 0;
		}
		public T Entity(int id) {
			return db.Set<T>().Find(id);
		}
	}
}

2、新建Service.Dal文件夹。
ServiceDal.cs用于封装常用的逻辑操作。注:ServiceCore方法和ServiceDal方法可以合并成一个,这边为了后面用到方便所以这边暂时分开。

namespace Service
{
	public class ServiceDal<T> where T : class, new()
	{
		private BBCDbContext db;
		public ServiceDal(BBCDbContext _db) {
			db = _db;
		}

		public bool Adds(List<T> entities) {
			db.AddRange(entities);
			return db.SaveChanges() == entities.Count();
		}
		public bool Removes(List<T> entities) {
			db.RemoveRange(entities);
			return db.SaveChanges() == entities.Count();
		}
		public bool Updates(List<T> entities) {
			db.UpdateRange(entities);
			return db.SaveChanges() == entities.Count();
		}
		public List<T> GetList() {
			return db.Set<T>().ToList();
		}
		public IQueryable<T> Entites(Expression<Func<T, bool>> lambda) {
			return db.Set<T>().Where(lambda).AsQueryable();
		}
	}
}

3、新建Service.Bll文件夹。
用于封装每一个单体实体操作,包括单个实体添加,多个实体一次性添加,单个实体删除,多个实体删除,单实体数据更改,多个实体更新,以及通过主键查询单个实体,查询实体数据列表,通过条件查询列表数据。 以下以SysUserService实体方法为例

namespace Service
{
	public class SysUserService
	{
		private readonly ServiceDal<SysUser> dal;
		private readonly ServiceCore<SysUser> core;
		public SysUserService(ServiceDal<SysUser> _dal, ServiceCore<SysUser> _core) {
			dal = _dal;
			core = _core;
		}
		public bool Add(SysUser entity) {
			return core.Add(entity);
		}
		public bool Adds(List<SysUser> entities) {
			return dal.Adds(entities);
		}
		public bool Remove(SysUser entity) {
			return core.Remove(entity);
		}
		public bool Removes(List<SysUser> entities) {
			return dal.Removes(entities);
		}
		public bool Update(SysUser entity) {
			return core.Update(entity);
		}
		public bool Updates(List<SysUser> entities) {
			return dal.Updates(entities);
		}
		public SysUser GetEntity(int id) {
			return core.Entity(id);
		}
		public List<SysUser> SysUsers() {
			return dal.GetList();
		}
		public IQueryable GetEntites(Expression<Func<SysUser, bool>> lambda) {
			return dal.Entites(lambda);
		}
	}
}

总结
依次类推,将其他业务逻辑也进行封装,或者在使用到的时候在进行封装。如下图
在这里插入图片描述

页面显示层操作即Web UI

BBC_Web

首先下载Bootstrap.js插件

数据库逻辑

设计sql

CREATE TABLE [dbo].[Sys_User](
	[Id] [INT] IDENTITY(1,1) NOT NULL,
	[UserName] [VARCHAR](50) NOT NULL,
	[Password] [VARCHAR](50) NOT NULL,
	[NickName] [NVARCHAR](50) NULL,
	[Phone] [VARCHAR](50) NULL,
	[WChart] [VARCHAR](100) NULL,
	[EMail] [VARCHAR](200) NULL,
	[Sex] [INT] NOT NULL,
	[Address] [NVARCHAR](200) NULL,
	[Count] [INT] NULL,
	[IdCard] [VARCHAR](50) NULL,
	[Summary] [NVARCHAR](100) NULL,
	[CreateUser] [INT] NOT NULL,
	[CreateTime] [DATETIME] NOT NULL,
	[UpdateUser] [INT] NULL,
	[UpdateTime] [DATETIME] NULL,
	[State] [VARCHAR](50) NOT NULL,
 CONSTRAINT [PK_Sys_User] PRIMARY KEY CLUSTERED 
(
	[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[Sys_Role](
	[Id] [INT] IDENTITY(1,1) NOT NULL,
	[RoleName] [NVARCHAR](50) NOT NULL,
	[RoleSort] [INT] NULL,
	[Summary] [NVARCHAR](100) NULL,
	[CreateUser] [INT] NOT NULL,
	[CreateTime] [DATETIME] NOT NULL,
	[UpdateUser] [INT] NULL,
	[UpdateTime] [DATETIME] NULL,
	[State] [VARCHAR](50) NOT NULL,
 CONSTRAINT [PK_Sys_Role] PRIMARY KEY CLUSTERED 
(
	[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[Sys_UserRole](
	[Id] [INT] IDENTITY(1,1) NOT NULL,
	[UserId] [INT] NOT NULL,
	[RoleId] [INT] NOT NULL,
	[Summary] [NVARCHAR](100) NULL,
	[CreateUser] [INT] NOT NULL,
	[CreateTime] [DATETIME] NOT NULL,
	[UpdateUser] [INT] NULL,
	[UpdateTime] [DATETIME] NULL,
	[State] [VARCHAR](50) NOT NULL,
 CONSTRAINT [PK_Sys_UserRole] PRIMARY KEY CLUSTERED 
(
	[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[Sys_Menu](
	[Id] [INT] IDENTITY(1,1) NOT NULL,
	[ParentId] [INT] NULL,
	[MenuName] [NVARCHAR](50) NULL,
	[MenuUrl] [VARCHAR](50) NULL,
	[MenuSort] [INT] NULL,
	[MenuIcon] [VARCHAR](50) NULL,
	[MenuType] [VARCHAR](50) NULL,
	[Summary] [NVARCHAR](100) NULL,
	[CreateUser] [INT] NOT NULL,
	[CreateTime] [DATETIME] NOT NULL,
	[UpdateUser] [INT] NULL,
	[UpdateTime] [DATETIME] NULL,
	[State] [VARCHAR](50) NOT NULL,
 CONSTRAINT [PK_Sys_Menu] PRIMARY KEY CLUSTERED 
(
	[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[Sys_MenuRole](
	[Id] [INT] IDENTITY(1,1) NOT NULL,
	[RoleId] [INT] NOT NULL,
	[MenuId] [INT] NOT NULL,
	[Summary] [NVARCHAR](100) NULL,
	[CreateUser] [INT] NOT NULL,
	[CreateTime] [DATETIME] NOT NULL,
	[UpdateUser] [INT] NULL,
	[UpdateTime] [DATETIME] NULL,
	[State] [VARCHAR](50) NOT NULL,
 CONSTRAINT [PK_Sys_MenuRole] PRIMARY KEY CLUSTERED 
(
	[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[Sys_Dictionary](
	[Id] [INT] IDENTITY(1,1) NOT NULL,
	[Key] [VARCHAR](50) NOT NULL,
	[Value] [NVARCHAR](50) NOT NULL,
	[Summary] [NVARCHAR](100) NULL,
	[CreateUser] [INT] NOT NULL,
	[CreateTime] [DATETIME] NOT NULL,
	[UpdateUser] [INT] NULL,
	[UpdateTime] [DATETIME] NULL,
	[State] [VARCHAR](50) NOT NULL,
 CONSTRAINT [PK_Sys_Dictionary] PRIMARY KEY CLUSTERED 
(
	[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[Log_Page](
	[Id] [INT] IDENTITY(1,1) NOT NULL,
	[Excetpion] [NVARCHAR](MAX) NOT NULL,
	[Page] [VARCHAR](50) NOT NULL,
	[Type] [VARCHAR](50) NULL,
	[Summary] [NVARCHAR](100) NULL,
	[CreateUser] [INT] NOT NULL,
	[CreateTime] [DATETIME] NOT NULL,
	[UpdateUser] [INT] NULL,
	[UpdateTime] [DATETIME] NULL,
	[State] [VARCHAR](50) NOT NULL,
 CONSTRAINT [PK_Log_Page] PRIMARY KEY CLUSTERED 
(
	[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
CREATE TABLE [dbo].[Log_Login](
	[Id] [INT] IDENTITY(1,1) NOT NULL,
	[IpAddress] [VARCHAR](200) NOT NULL,
	[Browse] [VARCHAR](300) NOT NULL,
	[Os] [VARCHAR](150) NULL,
	[Summary] [NVARCHAR](100) NULL,
	[CreateUser] [INT] NOT NULL,
	[CreateTime] [DATETIME] NOT NULL,
	[UpdateUser] [INT] NULL,
	[UpdateTime] [DATETIME] NULL,
	[State] [VARCHAR](50) NOT NULL,
 CONSTRAINT [PK_Log_Login] PRIMARY KEY CLUSTERED 
(
	[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[Log_Operate](
	[Id] [INT] IDENTITY(1,1) NOT NULL,
	[Title] [NVARCHAR](50) NULL,
	[Content] [NVARCHAR](50) NULL,
	[IpAddress] [VARCHAR](50) NULL,
	[Summary] [NVARCHAR](100) NULL,
	[CreateUser] [INT] NOT NULL,
	[CreateTime] [DATETIME] NOT NULL,
	[UpdateUser] [INT] NULL,
	[UpdateTime] [DATETIME] NULL,
	[State] [VARCHAR](50) NOT NULL,
 CONSTRAINT [PK_Log_Operate] PRIMARY KEY CLUSTERED 
(
	[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值