Sql语法高级应用之一:使用sql语句如何实现不同的角色看到不同的数据
前言
在常见的管理系统中,通常都有这样的需求,管理员可以看到所有数据,部门可以看到本部门的数据,组长可以看到自己组的数据,组员只能看到自己相关的数据。
一般人的做法是,根据不同的角色通过if...else嵌套实现。这样做会显得代码过于臃肿。下面分享我的解决方案:
实现方案
通过sql语句,配合存储过程一段代码就搞定了,下面附上实现代码:
sql += " AND (" + adminStr + " OR (" + saleStr + " AND SalesGroupId IN('" + string.Join("','", mgroupList) + "')) OR (" + gmgStr + " AND SalesGroupId = '" + sg.Key + "') OR SalesUserId = '" + user.Id + "')";
return sql;
adminStr:是判断是否是管理员
saleStr:判断是否是部门
mgroupList:部门的组列表
gmgStr:是否是组长(组管理者)
使用EF+Linq语句实现方案:

也是一段代码就搞定了,代码简洁而美观。
PS:欢迎扫描下方二维码或点击链接,加入QQ群


Sql语法高级应用之一:使用sql语句如何实现不同的角色看到不同的数据的更多相关文章
- Sql语法高级应用之二:视图
SQL CREATE VIEW 语句 什么是视图? 在 SQL 中,视图是基于 SQL 语句的结果集的可视化的表. 视图包含行和列,就像一个真实的表.视图中的字段就是来自一个或多个数据库中的真实的表中 ...
- PL/SQL编程基础(一):PL/SQL语法简介(匿名PL/SQL块)
PL/SQL PL/SQL是Oracle在关系数据库结构化查询语言SQL基础上扩展得到的一种过程化查询语言. SQL与编程语言之间的不同在于,SQL没有变量,SQL没有流程控制(分支,循环).而PL/ ...
- Sql语法高级应用之六:如何在Sql语句中如何使用TRY...CATCH
TRY...CATCH使用范例 BEGIN TRY //逻辑语句块 END TRYBEGIN CATCH //Catch异常处理块 SET @msg = ERROR_MESSAGE(); PRINT ...
- Sql语法高级应用之三:存储过程
一.存储过程概述 SQL Server中的存储过程是使用T_SQL编写的代码段.它的目的在于能够方便的从系统表中查询信息,或者完成与更新数据库表相关的管理任务和其他的系统管理任务.T_SQL语句是SQ ...
- Sql语法高级应用之四:使用视图实现多表联合数据明细
之前章节我们讲到:如果某个表的数据是多个表的联合,并且存在列与列的合并组成新列,用视图是最好的方案. 下面我分享两个个真实的SQL语句案例 USE Wot_Inventory GO FROM sys. ...
- Sql语法高级应用之七:如何在存储过程中使用事务
普通事物: USE Wot_Inventory; GO BEGIN TRANSACTION tr; DECLARE @error INT; SET @error = 0; SELECT * FROM ...
- Sql语法高级应用之五:使用存储过程实现对明细多层次统计
前言 前面章节我们讲到了存储过程的基础用法,本章则将一个在项目中实际应用的场景. 在项目中经常会存在这样的需求,例如需要对明细列表进行按组.按级别.按人等进行统计,如果在附带列表的查询条件,又如何实现 ...
- 010-Hadoop Hive sql语法详解5-HiveQL与SQL区别
1.Hive不支持等值连接 •SQL中对两表内联可以写成:•select * from dual a,dual b where a.key = b.key;•Hive中应为•select * from ...
- mysql中SQL执行过程详解与用于预处理语句的SQL语法
mysql中SQL执行过程详解 客户端发送一条查询给服务器: 服务器先检查查询缓存,如果命中了缓存,则立刻返回存储在缓存中的结果.否则进入下一阶段. 服务器段进行SQL解析.预处理,在优化器生成对应的 ...
随机推荐
- 测试工具-PICT-微软基于数据项多个取值的正交法用例生成工具
下载 http://download.microsoft.com/download/f/5/5/f55484df-8494-48fa-8dbd-8c6f76cc014b/pict33.msi 这里使用 ...
- 使用TensorFlow识别照片中的物体
1.环境ubuntu14.04.5 安装TensorFlow 官方文档:https://www.tensorflow.org/install/install_linux sudo pip instal ...
- libcurl 调用curl_easy_getinfo( ) 返回错误码对照
//执行设置好的操作 res = curl_easy_perform(easy_handle); //获取HTTP错误码 ; curl_easy_getinfo(easy_handle, CURLIN ...
- 2 数据库开发--MySQL下载(windows)
Windows:(mysql) 操作: 0.下载安装mysql www.mysql.org downloads->进入社区community community 5.7.21 下载5.6 Mic ...
- SpringMVC 学习笔记(处理器映射器的配置)
前端控制器(dispatchServlet) 在web.xml中配置前端控制器,在服务器启动时就被创建,用来对请求和响应进行接收 和 分发处理,其在配置时可以设置一个初始化参数,用来定位SpringM ...
- LUA表 pairs, ipairs输出顺序问题
t = { [] = , [] = , [] = , [] = , [] = , [] = , [] = , [] = , [] = -, } t1 = { , , , , } table.sort( ...
- java普通类如何调用Spring的Service层?
首先在Service层上面添加 @Service("myService") 然后,在main方法中调用,String[]中为配置文件,如下所示: ApplicationContex ...
- overloading与overriding的区别
overloading: “重载”,参数和返回值可改变. overriding: “覆盖”,重写父类的虚函数,参数和返回值必须与父类相同. 重写Overriding是父类与子类之间多态性的一种表现,重 ...
- for 续9
-------siwuxie095 for 拾遗: 一: for 语句里,do 后面一般会有括号,有括号就是复合语句, 假如需要用到括号里的变量,就需要 ...
- mongodb查询速度慢是什么原因?
mongodb查询速度慢是什么原因? 通过mongodb客户端samus代码研究解决问题 最近有项目需要用到mongodb,于是在网上下载了mongodb的源码,根据示例写了测试代码, ...