如何写程序,当用户进来只可以查到他有权限查看的信息?

hanwen 2009-03-04 03:21:48
table:限权控制表

用户ID,地区,产品型号
张三, ALL, Moto (意思是张三可以查看Moto在所有地区的批发价)
张三, 广东, ALL (意思是张三可以查看在广东地区的批发出去的产品的价格)
张三, 广西, Sony (意思是张三可以查看在广西地区的批发的Sony的价格)
李四, 广东, Moto
李四, 广东, Nokia

table:产品批发
产品型号,销售地区,批发价
Moto , 广东, 1000
Moto , 北京, 1010
Sony , 广东, 1200
Sony , 广西, 1210
Nokaia , 广西, 1500

如何写程序,当用户进来只可以查到他有权限查看的信息?
...全文
70 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
anwsp 2009-03-04
  • 打赏
  • 举报
回复
mark
dawugui 2009-03-04
  • 打赏
  • 举报
回复
create table tb1(用户ID varchar(10),地区 varchar(10),产品型号 varchar(10))
insert into tb1 values('张三', 'ALL', 'Moto')
insert into tb1 values('张三', '广东', 'ALL')
insert into tb1 values('张三', '广西', 'Sony')
insert into tb1 values('李四', '广东', 'Moto')
insert into tb1 values('李四', '广东', 'Nokia')
create table tb2(产品型号 varchar(10),销售地区 varchar(10),批发价 int)
insert into tb2 values('Moto' , '广东', 1000 )
insert into tb2 values('Moto' , '北京', 1010 )
insert into tb2 values('Sony' , '广东', 1200 )
insert into tb2 values('Sony' , '广西', 1210 )
insert into tb2 values('Nokaia' , '广西', 1500 )
go

--张三的
select distinct m.* from tb2 m , tb1 n
where (
((m.销售地区 = n.地区 and n.地区 <> 'all') or (n.地区 = 'all')) and
((m.产品型号 = n.产品型号 and n.产品型号 <> 'all') or (n.产品型号 = 'all')) and
n.用户ID = '张三'
)

/*
产品型号 销售地区 批发价
---------- ---------- -----------
Moto 北京 1010
Moto 广东 1000
Sony 广东 1200
Sony 广西 1210

(所影响的行数为 4 行)
*/

--李四的。
select distinct m.* from tb2 m , tb1 n
where (
((m.销售地区 = n.地区 and n.地区 <> 'all') or (n.地区 = 'all')) and
((m.产品型号 = n.产品型号 and n.产品型号 <> 'all') or (n.产品型号 = 'all')) and
n.用户ID = '李四'
)
/*
产品型号 销售地区 批发价
---------- ---------- -----------
Moto 广东 1000

(所影响的行数为 1 行)
*/

drop table tb1 , tb2
dawugui 2009-03-04
  • 打赏
  • 举报
回复
create table tb1(用户ID varchar(10),地区 varchar(10),产品型号 varchar(10))
insert into tb1 values('张三', 'ALL', 'Moto')
insert into tb1 values('张三', '广东', 'ALL')
insert into tb1 values('张三', '广西', 'Sony')
insert into tb1 values('李四', '广东', 'Moto')
insert into tb1 values('李四', '广东', 'Nokia')
create table tb2(产品型号 varchar(10),销售地区 varchar(10),批发价 int)
insert into tb2 values('Moto' , '广东', 1000 )
insert into tb2 values('Moto' , '北京', 1010 )
insert into tb2 values('Sony' , '广东', 1200 )
insert into tb2 values('Sony' , '广西', 1210 )
insert into tb2 values('Nokaia' , '广西', 1500 )
go

select distinct m.* from tb2 m , tb1 n
where (
((m.销售地区 = n.地区 and n.地区 <> 'all') or (n.地区 = 'all')) and
((m.产品型号 = n.产品型号 and n.产品型号 <> 'all') or (n.产品型号 = 'all')) and
n.用户ID = '张三'
)

drop table tb1 , tb2

/*
产品型号 销售地区 批发价
---------- ---------- -----------
Moto 北京 1010
Moto 广东 1000
Sony 广东 1200
Sony 广西 1210

(所影响的行数为 4 行)
*/
Zoezs 2009-03-04
  • 打赏
  • 举报
回复
把批发价该为*.
Zoezs 2009-03-04
  • 打赏
  • 举报
回复

select a.批发价 from 产品批发 a
join 权限控制表 b on a.产品型号=b.产品型号 and a.地区=b.地区
where 用户ID=''
dawugui 2009-03-04
  • 打赏
  • 举报
回复
select m.* from 产品批发 m , 限权控制表 n 
where ((m.销售地区 = n.地区 and n.地区 <> 'all') or n.地区 = 'all') and m.产品型号 = n.产品型号 and n.用户ID = '张三')

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧