>我最近遇到了一个要求,上面写着"经理应该看到所有记录,但员工应该只看到适当的子集。我将用下面的例子解释我的要求。
我有一张桌子。
CREATE TABLE [dbo].[Empolyee](
[EmpID] [int] NOT NULL,
[Name] [nvarchar](50) NOT NULL,
[Salary] [int] NULL,
[Grade] [char](1) NULL
)
和一些数据
insert into Empolyee values(1, 'John', 200, 'C')
insert into Empolyee values(2, 'Jim', 100, 'D')
insert into Empolyee values(3, 'Jane', 500, 'A')
insert into Empolyee values(4, 'Jack', 150, 'C')
insert into Empolyee values(5, 'Jil', 300, 'B')
insert into Empolyee values(6, 'Josh', 350, 'B')
A为最高等级,D为最低等级。
我想在 SSRS 中生成员工详细信息报告
只需显示
从Empolyee中选择*。
现在的要求是用户应该能够看到他/她的记录和较低等级的人。
例如如果简看到报告,她看到应该看到所有 6 个。如果杰克看到报告,她看到应该只看到2(他和吉姆的)
我可以看到这是基于角色的安全性的情况,但是如何实现这一点?
Select B.[Name] AS [Name2],B.[Salary] AS [Salary2],B.[Grade] AS [Grade2]
from Empolyee A
Cross jOIN Empolyee B
WHERE A.Grade <= B.Grade
and A.Name like 'Jack' -- mention your user here
AND B.EmpID NOT IN (Select EmpID FROM Empolyee C
WHERE C.Grade = A.Grade and C.Name <> A.Name)