通过编写客户端服务器应用程序,通常会遇到一个问题,即他需要根据登录用户执行返回不同记录的查询。
我使用这种方法,但我想知道是否有替代方案,您可以建议吗?
(我问的原因是,对于更多的complx查询,这变得非常难以理解,而使用一些CASE
语句则会更好。)
declare @UserIsAdministrator bit;
declare @UserID integer;
set @UserIsAdministrator = 0 -- test value
set @UserID = 41; -- test value
SELECT * FROM employees
WHERE
(@UserIsAdministrator = 1) -- if user is admin return all records
OR
(
(@UserIsAdministrator = 0)
AND
(manager_ID = @UserID)
) -- if user is not admin return only "his" records
答案 0 :(得分:2)
我想我会尽量避免在SQL查询中嵌入这种类型的授权。在选择要执行的查询之前,请在单独的层/组件中单独查询并解析角色和权限。
答案 1 :(得分:1)
选项:
IF和ELSE
IF @UserIsAdministrator = 1
SELECT * FROM employees
ELSE
SELECT * FROM employees WHERE manager_ID = @UserID
根据其他参数更改参数
IF @UserIsAdministrator = 1
SET @UserID = NULL
SELECT * FROM employees
WHERE manager_ID = ISNULL(@UserID, manager_ID)
或不同的观点/存储过程