近日遇到一個詭異的需求是這樣的:
某個客戶需要做一個搜索, 得到文檔的信息
這個文檔庫可能是帶權限的, 需要在顯示結果的時候判斷當前用戶在這個文檔庫上是否有權限
而這個文檔庫可能放在一個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
曾科 閱讀(294)
評論(0) 編輯 收藏 所屬分類:
SharePoint Portal Server