# RBAC权限管理 **Repository Path**: chennanzhe/rbac-manager ## Basic Information - **Project Name**: RBAC权限管理 - **Description**: 一套基于 ASP.NET MVC 5 + Entity Framework 6 的通用后台权限管理(RBAC)系统,提供用户、角色、部门、菜单、权限包的全生命周期管理,并内置登录鉴权、验证码与头像上传能力。采用经典的分层架构(Model / DAL / BLL / EF / Utility / Web),易于二次开发与维护。 - **Primary Language**: Unknown - **License**: GPL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-10-16 - **Last Updated**: 2026-10-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # PermisionManager(RBAC 权限管理系统) 一套基于 **ASP.NET MVC 5 + Entity Framework 6** 的通用后台权限管理(RBAC)系统,提供用户、角色、部门、菜单、权限包的全生命周期管理,并内置登录鉴权、验证码与头像上传能力。采用经典的分层架构(Model / DAL / BLL / EF / Utility / Web),易于二次开发与维护。 > **项目背景**:本系统为 **河北交通职业技术学院 · 电气与信息工程系** 的学生实训项目,用于教学实践与课程综合训练。示例数据(如「河北交通职业技术学院」「电气与信息工程系」等组织与超级管理员账号)即来源于此背景,便于学生理解企业级权限管理的真实业务场景。 > 说明:项目原始命名 `PermisionManager`(少了一个 s)为历史拼写,文中保持原名不做改动。 --- ## 一、技术栈 | 类别 | 技术 | | --- | --- | | 开发框架 | .NET Framework **4.5.2** / ASP.NET MVC **5.2.3** | | 数据访问 | Entity Framework **6.1.3**(Code First) | | 数据库 | SQL Server **LocalDB**(连接名 `ConnectionString`) | | 前端 | Bootstrap + jQuery(后台管理 UI) | | 其它 | Microsoft Application Insights(遥测)、System.Drawing(验证码) | | 开发环境 | Visual Studio 2015+(`.sln` 由 VS14 生成) | --- ## 二、解决方案结构 ``` rbac-manager/ ├─ PermisionManager.Web.sln # 解决方案文件 ├─ DabaseFile/ # 本地 LocalDB 数据库文件(.mdf / .ldf) ├─ PermisionManager.Model/ # 实体层:数据表映射(POCO + DataAnnotations) ├─ PermisionManager.EFUitity/ # EF 数据上下文、初始化与查询辅助 ├─ PermisionManager.DAL/ # 数据访问层:单表 CRUD 与查询 ├─ PermisionManager.BLL/ # 业务逻辑层:组合 DAL、分页、文件上传等 ├─ PermisionManager.Uitilty/ # 通用工具:验证码、权限比对模型 └─ PermisionManager.Web/ # 表现层:ASP.NET MVC 站点(Controllers/Views/Content) ``` **分层职责** - **Model**:10 张核心表的实体定义,使用 `[Key]`、`[ForeignKey]`、`[Required]` 等特性描述映射与关系。 - **EFUitity**:`DataAccessContext` 继承 `DbContext`;`MyDataInit` 在模型变更时重建库并播种初始数据;`PredicateExtensions` 提供 `And/Or` 动态拼接 Lambda 查询条件。 - **DAL**:每个实体对应一个 `XxxDAL`,提供 `Add / Update / Delete / ModelExist / DicList`(分页)等方法,依赖注入 `DataAccessContext`。 - **BLL**:每个实体对应一个 `XxxBLL`,封装业务规则(如默认密码、头像上传、批量删除),方法内自行 `new DataAccessContext()`。 - **Web**:MVC 控制器(6 个模块)+ Razor 视图 + 静态资源(Bootstrap/jQuery/自定义 JS)。 --- ## 三、数据模型(RBAC 核心) 系统共 **10 张表**,核心权限链路为: ``` 用户(SYS_USER) → 角色(SYS_ROLE) → 权限包(SYS_FUNCPACKAGE) → 功能菜单(SYS_FUNCTION) ``` | 实体 | 说明 | | --- | --- | | `SYS_USER` | 员工/用户,含账号、密码、部门、角色、头像、状态等 | | `SYS_ROLE` | 角色,通过 `ROL_FPGID` 绑定一个权限包 | | `SYS_DEPARTMENT` | 组织架构(支持 `DEPT_PARENTID` 层级) | | `SYS_DICTIONARY` | 一级菜单字典(菜单分组,含图标、排序) | | `SYS_FUNCTION` | 功能菜单项(URL、图标、是否系统菜单、排序) | | `SYS_FUNCPACKAGE` | 权限包(功能集合,可授予角色) | | `SYS_FUNCPACKAGE_DTL` | 权限包明细:权限包与功能菜单的多对多关联 | | `SYS_FUNCPACKAGE_DTL2` | 权限包明细扩展(按钮级权限标识) | | `SYS_FUNCBUTTON` | 功能按钮(页面内操作按钮,可精细化授权) | | `SYS_LOG` | 操作日志(操作人、表、内容、时间) | **登录鉴权逻辑**:`UserDAL.ValidateLogin` 校验账号密码后,沿 `用户 → 角色 → 权限包 → 权限包明细` 取出功能 ID 集合,写入 `SYS_USER.menus`,登录成功后据此渲染左侧菜单。 --- ## 四、功能模块 后台包含 **6 个管理模块**(对应 `MyDataInit` 播种的一级菜单): 1. **数据字典管理**(`/Dictionary`):维护一级菜单分组。 2. **功能菜单管理**(`/Function`):维护功能菜单项,可批量生成权限包。 3. **权限控制管理**(`/FuncPackage`):维护权限包,可视化分配/撤销功能权限(`ShowPermission`)。 4. **角色配置管理**(`/Role`):维护角色并绑定权限包。 5. **组织结构管理**(`/Department`):维护部门树。 6. **员工信息管理**(`/User`):维护用户,支持头像上传、批量删除。 **通用能力** - 登录页带 **图形验证码**(基于 `System.Drawing` 正弦扭曲),校验通过 Session 保存用户信息。 - 列表采用 **limit/offset 分页**,通过 `ListAjax` 返回 `{total, rows}` 的 JSON。 - 头像上传至 `/Content/attachments/`,以 `Guid` 重命名避免冲突。 - 提供 `ListForAndroid` 接口,供移动端以 `JsonRequestBehavior.AllowGet` 拉取全量数据。 - EF 延迟加载属性在 JSON 序列化时经投影(`Select` 匿名对象)规避循环引用异常。 --- ## 五、默认账号 数据库初始化(`MyDataInit.Seed`)会写入: - **账号**:`admin` - **密码**:`123456` - **角色**:超级管理员(已绑定包含所有功能的权限包) - **部门**:河北交通职业技术学院(示例数据) --- ## 六、快速开始 1. 使用 **Visual Studio 2015 或更高版本** 打开 `PermisionManager.Web.sln`。 2. 还原 NuGet 包(EF 6.1.3、MVC 5.2.3、Application Insights 等)。 3. 确认本机已安装 **SQL Server LocalDB**(VS 自带)。如需改用其它实例,修改 `PermisionManager.Web/Web.config` 中的连接字符串: ```xml ``` 4. 直接 **F5 运行**。`MyDataInit`(继承 `DropCreateDatabaseIfModelChanges`)会在首次启动时自动建库并播种示例数据。 5. 访问登录页,使用 `admin / 123456` 登录。 --- ## 七、注意事项与改进建议 > 以下为代码现状,生产环境部署前建议处理: - **密码明文存储**:`SYS_USER.USR_PWD` 以明文保存,默认密码 `123456`;应改为加盐哈希(如 PBKDF2 / bcrypt)。 - **数据库初始化策略**:`DropCreateDatabaseIfModelChanges` 会在模型变动时**删除并重建数据库**,仅适用于开发,生产应改为 `Migrations` 或 `CreateDatabaseIfNotExists`。 - **连接字符串**:示例中使用 `sa/sa` 连 LocalDB 通常不适用,请按实际环境调整;避免把凭据提交到仓库。 - **Session 鉴权**:当前用 `Session["UserInfo"]` 做登录态,未做统一的授权过滤器(Action/Role Filter),建议补充 `[Authorize]` 或自定义权限拦截。 - **JSON 序列化**:`Json()` 默认未开启 `AllowGet`,移动端接口已单独处理;注意敏感字段不要透出到前端。 - **项目风格**:`.csproj` 为传统(非 SDK 风格)格式,目标框架 `net452`,需本机具备 .NET Framework 4.5.2 目标包。 --- ## 八、目录速查 | 想了解 | 看这里 | | --- | --- | | 表结构与关系 | `PermisionManager.Model/*.cs` | | EF 上下文与建库逻辑 | `PermisionManager.EFUitity/DataAccessContext.cs`、`MyDataInit.cs` | | 动态查询拼接 | `PermisionManager.EFUitity/PredicateExtensions.cs` | | 单表 CRUD | `PermisionManager.DAL/*DAL.cs` | | 业务规则/上传 | `PermisionManager.BLL/*BLL.cs` | | 登录与验证码 | `PermisionManager.Web/Controllers/UserController.cs`、`PermisionManager.Uitilty/ValidateCodeUtils.cs` | | 模块入口与接口 | `PermisionManager.Web/Controllers/*.cs` |