0
点赞
收藏
分享

微信扫一扫

有意思的业务~根据角色与信息状态,显示指定信息列表

事情是这样的,一个需求,根据当前登陆用户的角色,显示指定的信息列表。

说明:角色与信息的状态有关系,如管理员,可以看到状态为1和2的记录,而普通用户只能看到状态是1的记录,对于这种需要,我们可以设置一张表来实现,当然直接写在程序中也可以

Role_Status_R表如下:

RoleID int Not null

Status varchar(200) [可以使用int类型,但要求你的值必须是通过位移运算产生的]

数据库结构如下:

有意思的业务~根据角色与信息状态,显示指定信息列表_支付宝

有意思的业务~根据角色与信息状态,显示指定信息列表_支付宝_02

当然也可以设计一个字典来维护它们的关系,但不利于以后扩展,建议使用数据库方式,字典方式代码如下:

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

3 将query这个表达式树的结果,传入结果集即可。

 

作者:仓储大叔,张占岭,
荣誉:微软MVP

举报

相关推荐

0 条评论