权限设计请教--100分--在线等

qhlisa 2009-11-19 07:31:57
我做的一个收文发文系统

发送文件时选择收件人~~收件人可以多选~~
文件发送后如何判断哪些人可以查看此文件?

我设计的
文件储存表 table1 用户信息表table2
说明:table1.UserId(发送文件给一个或多个用户时把用户Id用,分隔写入此字段)

table1----------------
ID Path UserId SId InfoTime
1 nnn 1,2,3,4, 2
2 nnn 1,2,3,4, 2
3 nnn 1,2,3,4, 2

table2-----------------
Id Name PassWord Flag
1 admin **** 0
2 12344 **** 0
3 33333 **** 0

当table2.Id(用户登陆后获取一个Id) in table1.UserId 时显示所有符合查看权限的文件.

请教大侠们这样的表设计能实现文件发送后,有查看权限的用户可以查看文件吗?

如果可以~~sql该怎么写?

如果不行~~请大侠们写个方法例子~~谢谢~~
...全文
124 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
qhlisa 2009-11-20
  • 打赏
  • 举报
回复
谢谢 jxwangjm
用你的方法搞定啦~~

感谢camperer的建议~不过我还没去试~~

谢谢大家
camperer 2009-11-19
  • 打赏
  • 举报
回复
看来楼主的开发经验不太多。多打几个字吧。。
例如文件1对应用户1,2,3,4,5;文件2对应用户1,3,5
那么在关系表中中就是这样的
fid uid
1 1
1 2
1 3
1 4
1 5
2 1
2 3
2 5
很直观地就能表达出文件2对应用户1,3,5,用户1对应文件1,2
min0625 2009-11-19
  • 打赏
  • 举报
回复
去bing 一下
camperer 2009-11-19
  • 打赏
  • 举报
回复
2个外键:fid对应文件表的主键,uid对应用户表的主键
阿非 2009-11-19
  • 打赏
  • 举报
回复
这样设计可以

存的时候这样存

,1,2,3,4,...

注意前后都有,

这样根据文件的ID 就可以找到对应的收件人 userID 字段的值

就是 ,1,2,3,4,

然后用 取出来 在C# 中判断 用 contains 判断 当前用户的用户ID 是否在 其中

做相应操作
qhlisa 2009-11-19
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 camperer 的回复:]
引用 3 楼 jsjhj2008 的回复:

楼主不要想着躲懒,分表是必要的。按你现在的做法,如果你以后需要在现有数据库基础上扩充,例如同一个文件多个用户收,你要标记具体某一个用户是否收取到并打开看过,怎么办?
象这样的多对多的关系还是分表吧,文件一张表,用户一张表,文件和用户的关系再建一张表
[/Quote]

请问文件和用户关系这张表应该怎么设计?
mzjmicrosoft 2009-11-19
  • 打赏
  • 举报
回复
权限设计 俺一般在表里面加的

camperer 2009-11-19
  • 打赏
  • 举报
回复
呃,提交后才发现前面有人说过了。。。
那就当我没说过纯路过吧。
camperer 2009-11-19
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 jsjhj2008 的回复:]
select Path from table1,table2 where table2.id=@id and table1.UserId like %@id%
[/Quote]
你这样搞还不如分隔呢。。。举个例子,如果某id是11,数据库中有112、1123、118这样的数据不就like匹配上了吗?

楼主不要想着躲懒,分表是必要的。按你现在的做法,如果你以后需要在现有数据库基础上扩充,例如同一个文件多个用户收,你要标记具体某一个用户是否收取到并打开看过,怎么办?
象这样的多对多的关系还是分表吧,文件一张表,用户一张表,文件和用户的关系再建一张表
wuyq11 2009-11-19
  • 打赏
  • 举报
回复
分割userId.
declare @i int,@ID int
set @i=0
while(len(@UserID)>0)
begin
if(charindex(',',@UserID)>0)
begin
set @BH=substring(@UserID,1,charindex(',',@UserID)-1)
set @UserID=substring(@UserID,len(@BH)+2,len(@UserID))
if(@BH=@ID )
begin
set @i=1
break
end
end
else
begin
set @BH=@UserID
break
end
end
或用select * from tb where patindex('%%',name)>0
jxwangjm 2009-11-19
  • 打赏
  • 举报
回复
用like 行不通哦~~用like 如果table1.UserId的值是 2,3,11, 那么@id=1时~~那么1跟11...条件也成立啦~~而table1.UserId值里并没有1~~
-----------------------
不过,可以改用like '2,%',只是必须保证table1.UserId可中末位是','
zzxap 2009-11-19
  • 打赏
  • 举报
回复
http://www.cnblogs.com/supercode/archive/2005/06/13/173524.html
lfcms 2009-11-19
  • 打赏
  • 举报
回复
路过~
jxwangjm 2009-11-19
  • 打赏
  • 举报
回复
你的这种设计应该可以达到你的要求
不过,我觉得可以再加一个表,即file-user表,用来存储文件可以供哪些阅读。
file,user,read_flg,write_flg
这样设计的话SQL语句应该很好写
qhlisa 2009-11-19
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 jsjhj2008 的回复:]
select Path from table1,table2 where table2.id=@id and table1.UserId like %@id%
[/Quote]

用like 行不通哦~~用like 如果table1.UserId的值是 2,3,11, 那么@id=1时~~那么1跟11...条件也成立啦~~而table1.UserId值里并没有1~~
happy664618843 2009-11-19
  • 打赏
  • 举报
回复
不好搞 放在sql版块 有高人 友情帮顶
jsjhj2008 2009-11-19
  • 打赏
  • 举报
回复
select Path from table1,table2 where table2.id=@id and table1.UserId like %@id%
小_虎 2009-11-19
  • 打赏
  • 举报
回复
split,不好弄吧。。

好像可以写个函数运用。。
bancxc 2009-11-19
  • 打赏
  • 举报
回复
用,分隔不好吧 改成一行一行的吧

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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