近日遇到一个诡异的需求是这样的:
某个客户需要做一个搜索, 得到文档的信息
这个文档库可能是带权限的, 需要在显示结果的时候判断当前用户在这个文档库上是否有权限
而这个文档库可能放在一个wss网站上
只允许一个部门的人进入这个网站, 但是该文档库可以给其他部门的人加权限以便查看其中的文档
以下是用对象模型的方法判断文档库上的权限:
一般来说首先想到的方法肯定是这样的:
SPSite site = new SPSite("
http://mysite_url
"); // Line 1
SPWeb web = site.OpenWeb(); // Line 2
SPListCollection lists = web.Lists; // Line 3
SPList list = lists["MyDocLib"]; // Line 4
bool perm = list.Permissions.DoesUserHavePermission(SPRights.xxxx);
但是, 对于上面提到的那种情况, 这种方法是有问题的
问题一:
该用户如果不是该网站成员的话, 上面的做法得不到网站
其表现就是webpart所在页面会反复弹出用户名密码框......即使你做了try-catch也没用, 截不下这个异常
问题二:
该用户不是该网站成员, 默认情况下不允许使用web.Lists[]这种方法, 会有异常
对于第一个问题解决如下, 插入一行代码:
site.CatchAccessDeniedException = false; // Line 1.5
这个属性就像其名字一样, 嗯, 不罗嗦了, 就是可以拿到那个SPWeb对象了
对于第二个问题, 插入一行代码:
lists.ListsForCurrentUser = true; // Line 3.5
这样再用web.Lists[]就能得到SPList对象, 然后再判权限就行了
上面两个对象模型估计一般情况下都是用不上的...只有在某些诡异需求的情况下可能会用到
转载:otec:Erucy
posted on 2006-11-29 11:20
曾科 阅读(286)
评论(0) 编辑 收藏 所属分类:
SharePoint Portal Server