有意思的业务~根据角色与信息状态,显示指定信息列表
事情是这样的,一个需求,根据当前登陆用户的角色,显示指定的信息列表。
说明:角色与信息的状态有关系,如管理员,可以看到状态为1和2的记录,而普通用户只能看到状态是1的记录,对于这种需要,我们可以设置一张表来实现,当然直接写在程序中也可以
Role_Status_R表如下:
RoleID int Not null
Status varchar(200) [可以使用int类型,但要求你的值必须是通过位移运算产生的]
数据库结构如下:
当然也可以设计一个字典来维护它们的关系,但不利于以后扩展,建议使用数据库方式,字典方式代码如下:
1 //用户角色与状态关系字典 2 Dictionary<int, int[]> Role_Status_R = new Dictionary<int, int[]>(); 3 Role_Status_R.Add(1, new int[] { }); 4 Role_Status_R.Add(2, new int[] { 1, 4 });
一个用户可以有多个角色,就是说,它应该是多个角色所对应的状态值之和,当我们有了角色所能看到的“状态值”后,在获取数据时,对数据集的status字段进行过滤即可。
下面说一下流程:
1 用户登陆,将角色ID存储到session中(或者其它服务器缓存中),代码如下:
1 //将用户角色写入session中 2 int[] urole = new Common.Background.Data.WebManageUser_WebManageRolesRepository().GetModel().Where(i => i.ManageUserID == id).Select(i => i.ManageRoleID).ToArray(); 3 string roles = ""; 4 Array.ForEach(urole, i => 5 { 6 roles += i + ","; 7 }); 8 SessionAction.WriteSession("userRole", roles); 9 string trueName = wu == null ? string.Empty : wu.RealName; 10 SessionAction.WriteSession("trueName", trueName); 11 string a = WebSession.TrueName; 12 }
2 在查询列表时,从session中取出来,做一下处理,代码如下:
1 //用户的角色管理 2 int[] statusList = { 0 }; 3 Array.ForEach(SessionAction.ReadSession("userRole").Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries), i => 4 { 5 statusList.Concat(OrderBuy_Info.Role_Status_R[Convert.ToInt32(i)]); 6 }); 7 query = query.And(p => statusList.Distinct().Contains(p.Status));
3 将query这个表达式树的结果,传入结果集即可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
2011-07-05 不忘本~接口