博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(20)-权限管理系统-根据权限获取菜单...
阅读量:5170 次
发布时间:2019-06-13

本文共 1823 字,大约阅读时间需要 6 分钟。

原文:

不知不觉到20讲,真是漫长的日子,可惜最近工作挺忙,要不可以有更多的时间来更新,多谢大家的一路支持.如果你觉得好,记得帮我点击推荐^-^

我们在之前已经插入一些真实数据,其中包含了一个用户和样例程序SysSample的权限,并实现了用户的登录。

但有的朋友对表还是有疑惑,通过下面的linq查询,应该你就没有这个困惑了。

不出意外,我们的菜单栏将只显示样例程序这个模块。

这就简单了,我们已经有了获取菜单栏的类了,只要加入用户参与判断即可,所以我们将修改

IBLL BLL IDAL DAL层的Home类(红色为原来的,绿色为最新修改的)

 List<SysModule> GetMenuByPersonId(string moduleId);

List<SysModule> GetMenuByPersonId(string personId, string moduleId);

---------------------------

public List<SysModule> GetMenuByPersonId(string moduleId)

        {
            return HomeRepository.GetMenuByPersonId(moduleId);
        }

 public List<SysModule> GetMenuByPersonId(string personId, string moduleId)

        {
            return HomeRepository.GetMenuByPersonId(personId,moduleId);
        }

---------------------------

List<SysModule> GetMenuByPersonId(string moduleId);

List<SysModule> GetMenuByPersonId(string personId, string moduleId);

---------------------------

最后看到DAL层,这里是获取菜单逻辑代码

 public List<SysModule> GetMenuByPersonId(string moduleId)

        {
            using (DBContainer db = new DBContainer())
            {
                var menus =
                (
                    from m in db.SysModule
                    where m.ParentId == moduleId
                    where m.Id != "0"
                    select m
                          ).Distinct().OrderBy(a=>a.Sort).ToList();
                return menus;
            }
        }

   public List<SysModule> GetMenuByPersonId(string personId, string moduleId)

        {
            using (DBContainer db = new DBContainer())
            {
                var menus =
                (
                    from m in db.SysModule
                    join rl in db.SysRight
                    on m.Id equals rl.ModuleId
                    join r in
                        (from r in db.SysRole
                         from u in r.SysUser
                         where u.Id == personId
                         select r)
                    on rl.RoleId equals r.Id
                    where rl.Rightflag == true
                    where m.ParentId == moduleId
                    where m.Id != "0"
                    select m
                          ).Distinct().OrderBy(a => a.Sort).ToList();
                return menus;
            }
        }

别忘记在Home的Controller传入用户的ID

预览下效果

果真是我们要的效果

现在要做的就是把之前那些日志管理,异常管理等等加入到数据表中看看效果了。

通过这里你可以熟悉下数据流。

但我总觉得上面的linq语句是可以继续优化的,求linq大神!!!!

posted on
2014-02-23 13:12 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/lonelyxmas/p/3561815.html

你可能感兴趣的文章
以太坊钱包
查看>>
把数组变换成字符串(8)
查看>>
C#预处理器指令【转】
查看>>
docker镜像加速器
查看>>
Ruby module ---模块,组件
查看>>
css设置自适应屏幕高度
查看>>
vs2017添加引用出错:对COM组件的调用返回了错误HRESULT E_FAIL
查看>>
编译原理系列之四 自顶向下语法分析方法
查看>>
SpringBoot配置文件属性值
查看>>
记一次挖洞示例
查看>>
A1113 | Integer Set Partition (25)
查看>>
无监督算法
查看>>
设计模式---003代理模式---【巷子】
查看>>
IBase<T>
查看>>
Qwerty78 Trip(组合数,规律,逆元)
查看>>
Android 测试 之MonkeyRunner
查看>>
vue单页面应用中node做反向代理的原理
查看>>
python super()函数
查看>>
Python中参数iterable的意义
查看>>
C#调用大漠插件,发送QQ和微信消息
查看>>