news 2026/4/16 9:21:00

.Net通过EFCore和仓储模式实现统一数据权限管控并且相关权限配置动态生成

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
.Net通过EFCore和仓储模式实现统一数据权限管控并且相关权限配置动态生成

基于EFCore实现统一数据权限管控

在.NET应用中,通过EFCore和仓储模式实现数据权限管控,可以按照以下方式设计:

数据权限层级定义

数据权限通常分为四个层级:所有数据、本部门数据、本部门及下属部门数据、本人数据。通过仓储模式可以统一封装这些查询逻辑。

具体实现可参考NetCoreKevin的Kevin.EntityFrameworkCore.Repository`和kevin.Permission服务模块:实现统一数据权限管控并且相关权限配置动态生成

基于NET构建的现代化AI智能体Saas企业级架构:

项目地址:github:https://github.com/junkai-li/NetCoreKevin
Gitee: https://gitee.com/netkevin-li/NetCoreKevin

基础仓储接口设计

定义基础仓储接口,包含数据权限过滤方法:

publicinterfaceIRepository<T>whereT:class{IQueryable<T>GetAll();IQueryable<T>GetByDepartment(intdepartmentId);IQueryable<T>GetByDepartmentWithChildren(intdepartmentId);IQueryable<T>GetByUser(intuserId);}
实现数据权限过滤

在具体仓储实现中,通过EFCore的查询表达式实现不同级别的数据过滤:

publicclassRepository<T>:IRepository<T>whereT:class,IDataPermission{privatereadonlyDbContext_context;privatereadonlyICurrentUser_currentUser;publicRepository(DbContextcontext,ICurrentUsercurrentUser){_context=context;_currentUser=currentUser;}publicIQueryable<T>GetAll(){return_context.Set<T>().AsQueryable();}publicIQueryable<T>GetByDepartment(intdepartmentId){return_context.Set<T>().Where(x=>x.DepartmentId==departmentId);}publicIQueryable<T>GetByDepartmentWithChildren(intdepartmentId){vardepartmentIds=GetChildDepartmentIds(departmentId);return_context.Set<T>().Where(x=>departmentIds.Contains(x.DepartmentId));}publicIQueryable<T>GetByUser(intuserId){return_context.Set<T>().Where(x=>x.CreatedBy==userId);}privateList<int>GetChildDepartmentIds(intparentId){// 递归获取所有子部门ID}}
实体接口设计

定义数据权限相关实体接口,确保实体包含必要字段:

publicinterfaceIDataPermission{intDepartmentId{get;set;}intCreatedBy{get;set;}}
动态权限查询扩展

创建扩展方法,根据用户权限动态选择查询范围:

publicstaticclassRepositoryExtensions{publicstaticIQueryable<T>WithDataPermission<T>(thisIRepository<T>repository,DataPermissionLevellevel)whereT:class,IDataPermission{switch(level){caseDataPermissionLevel.All:returnrepository.GetAll();caseDataPermissionLevel.Department:returnrepository.GetByDepartment(currentUser.DepartmentId);caseDataPermissionLevel.DepartmentWithChildren:returnrepository.GetByDepartmentWithChildren(currentUser.DepartmentId);caseDataPermissionLevel.Owner:returnrepository.GetByUser(currentUser.UserId);default:thrownewArgumentOutOfRangeException();}}}
权限枚举定义

定义数据权限级别枚举:

publicenumDataPermissionLevel{All,Department,DepartmentWithChildren,Owner}
使用示例

在服务层或控制器中使用数据权限过滤:

publicclassEmployeeService{privatereadonlyIRepository<Employee>_repository;privatereadonlyICurrentUser_currentUser;publicEmployeeService(IRepository<Employee>repository,ICurrentUsercurrentUser){_repository=repository;_currentUser=currentUser;}publicList<Employee>GetEmployees(DataPermissionLevellevel){return_repository.WithDataPermission(level).ToList();}}
权限控制中间件

可以创建中间件自动设置当前用户的数据权限级别:

publicclassDataPermissionMiddleware{privatereadonlyRequestDelegate_next;publicDataPermissionMiddleware(RequestDelegatenext){_next=next;}publicasyncTaskInvokeAsync(HttpContextcontext,ICurrentUsercurrentUser){// 根据用户角色设置数据权限级别currentUser.DataPermissionLevel=GetPermissionLevelFromClaims(context.User);await_next(context);}}

这种实现方式通过仓储模式统一了数据权限控制逻辑,使业务代码无需关心具体权限实现细节,只需指定权限级别即可自动过滤数据。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/15 20:42:20

通讯魔法师profinet转ethernetip网关的神转换

通讯魔法师 profinet转ethernetip网关的神转换FANUC 机器人与 profinet通讯通常是把机器人配置为PN从站&#xff0c;由 PLC&#xff08;如 Siemens、Rockwell 等&#xff09;作为PN主站&#xff0c;通过 profinet 总线进行 I/O 数据交换。下面给你一个通用的实现要点和步骤&…

作者头像 李华
网站建设 2026/4/15 9:36:26

揭秘!光模块“零故障”的秘密:无尘车间里的匠心

在数据中心、5G基站等关键通信场景中&#xff0c;光模块作为光电信号转换的“核心枢纽”&#xff0c;其“零故障”运行直接关乎整个通信网络的稳定性。易天光通信&#xff08;ETU-LINK&#xff09;凭借多年深耕积累的工艺经验&#xff0c;以无尘车间为核心阵地&#xff0c;用极…

作者头像 李华
网站建设 2026/4/15 4:27:02

互联网大厂Java求职者面试技术栈全面分析

互联网大厂Java求职者面试技术栈全面分析 面试场景设定 在这个剧本中&#xff0c;我们将模拟一个互联网大厂的Java求职者面试场景&#xff0c;面试官是一位严肃的技术专家&#xff0c;而谢飞机是一位幽默风趣的求职者。他们之间将进行三轮提问&#xff0c;每轮包含3-5个问题&am…

作者头像 李华
网站建设 2026/4/12 19:04:01

Microsoft DP-700 考試戰報|Fabric 資料工程師一次通過心得

Microsoft DP-700 考試正式發佈&#xff1a;深入解析 Microsoft Fabric 數據工程解決方案認證之關鍵動態微軟&#xff08;Microsoft&#xff09;近期正式推出全新認證考試 DP-700&#xff1a;Implementing Data Engineering Solutions Using Microsoft Fabric&#xff0c;這標誌…

作者头像 李华
网站建设 2026/4/15 20:35:47

一文详解黑客是怎么利用钓鱼攻击,通过PDF文档暗投后门病毒的?网络安全零基础入门到精通实战教程!

免责声明由于传播、利用本号所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;作者不为此承担任何责任&#xff0c;一旦造成后果请自行承担&#xff01;如有侵权烦请告知&#xff0c;我们会立即删除并致歉。谢谢&#xff01;钓鱼攻…

作者头像 李华
网站建设 2026/4/15 15:47:12

2025顶级黑客练成计划,学会就入狱,手把手带你从零入门白帽黑客网络安全行业,学不会我退出网安圈

白帽子黑客是什么 说起黑客你一定耳熟&#xff0c;那么白帽黑客你知道吗&#xff1f;今天和知了姐一起来看看什么事白帽黑客及白帽黑客的作用。 白帽子黑客是指对网络技术防御的人。对电脑系统比如语言&#xff0c;TCP协议等等还有一些其他的有很高的造诣。他们精通攻击和防御&…

作者头像 李华