通过代码解决SharePoint列表视图权限分配问题
最近被SharePoint列表視圖分權(quán)限的問題困擾著,在網(wǎng)上搜到些解決方案,比較不錯的是Bewise.SharePoint.SPViewPermissionSetting的解決方案,但是在修改視圖權(quán)限配置的時候經(jīng)常出問題,不知道是什么原因,后來從codeplex上找到了這個解決方案的源碼,下來學(xué)習(xí)一下,總結(jié)如下:
它是通過自定義WebControl來修改ListViewWebPart的ViewSelector模板實現(xiàn)視圖權(quán)限過濾的。
開工:
第一步、
先建個ListViewPermissionConfig列表,用來存放視圖權(quán)限的配置信息。
列表欄:ListName(單行文本)、ViewName(單行文本)、ViewGuid(單行文本)、Permission(人員或用戶組,允許多選)。
第二步、
開寫代碼,示意代碼如下:
?
?1using?System;?2using?System.Collections.Generic;
?3using?System.Text;
?4using?System.Web.UI;
?5
?6using?Microsoft.SharePoint;
?7using?Microsoft.SharePoint.WebControls;
?8
?9namespace?ITS.SharePoint.WebControls
10{
11????public?class?CustomerViewMenu?:?ViewSelectorMenu
12????{
13????????/**////?<summary>
14????????///?用戶是否可以查看此時圖
15????????///?</summary>
16????????///?<param?name="viewID"></param>
17????????///?<param?name="userOrGroup"></param>
18????????///?<returns></returns>
19????????private?bool?CanSeeView(Guid?viewID,?SPUser?currentUser)
20????????{
21????????????bool?b?=?false;
22????????????using?(SPSite?site?=?new?SPSite("http://liust-server:100"))
23????????????{
24????????????????using?(SPWeb?icmWeb?=?site.AllWebs["ITSImportanceCustomerManagement"])
25????????????????{
26????????????????????SPList?listViewConfig?=?icmWeb.Lists["ListViewPermissionConfig"];
27????????????????????string?strQuery?=?string.Format("<Where><Eq><FieldRef?Name='ViewGuid'?/><Value?Type='Text'>{0}</Value></Eq></Where>",?viewID.ToString());
28????????????????????SPQuery?query?=?new?SPQuery();
29????????????????????query.Query?=?strQuery;
30
31????????????????????SPListItemCollection?items?=?listViewConfig.GetItems(query);
32????????????????????if?(items.Count?>?0)
33????????????????????{
34????????????????????????foreach?(SPListItem?item?in?items)
35????????????????????????{
36????????????????????????????object?obj?=?item["Permission"];
37????????????????????????????SPFieldUserValueCollection?userValues?=?(SPFieldUserValueCollection)obj;
38????????????????????????????foreach?(SPFieldUserValue?value?in?userValues)
39????????????????????????????{
40????????????????????????????????//如果value.User非空,則代表當(dāng)前值是用戶,相反則是用戶組。
41????????????????????????????????if?(value.User?!=?null)
42????????????????????????????????{
43????????????????????????????????????if?(currentUser.LoginName.Equals(value.User.LoginName))
44????????????????????????????????????????return?true;
45????????????????????????????????}
46????????????????????????????????else
47????????????????????????????????{
48????????????????????????????????????//判斷當(dāng)前用戶是否在用戶組中
49????????????????????????????????????SPGroup?group?=?icmWeb.Groups.GetByID(value.LookupId);
50????????????????????????????????????foreach(SPUser?user?in?group.Users)
51????????????????????????????????????{
52????????????????????????????????????????if?(currentUser.LoginName.Equals(user.LoginName))
53????????????????????????????????????????????return?true;
54????????????????????????????????????}
55????????????????????????????????}
56????????????????????????????}
57????????????????????????}
58????????????????????}
59????????????????}
60????????????}
61????????????return?false;
62????????}
63
64????????protected?override?void?Render(HtmlTextWriter?output)
65????????{
66????????????if?(this.Visible?&&?!SPContext.Current.Web.CurrentUser.IsSiteAdmin)
67????????????{
68????????????????foreach?(Control?item?in?base.MenuTemplateControl.Controls)
69????????????????{
70????????????????????try
71????????????????????{
72????????????????????????if?((item?is?MenuItemTemplate)?&&?(SPContext.Current.List.Views[((MenuItemTemplate)item).Text])?!=?null)
73????????????????????????{
74????????????????????????????SPView?tempView?=?SPContext.Current.List.Views[((MenuItemTemplate)item).Text];
75????????????????????????????if?(tempView.DefaultView)
76????????????????????????????????item.Visible?=?true;
77????????????????????????????else
78????????????????????????????????item.Visible?=?this.CanSeeView(tempView.ID,?SPContext.Current.Web.CurrentUser);
79????????????????????????}
80????????????????????}
81????????????????????catch?(Exception)?{?}
82????????????????}
83????????????????base.Render(output);
84????????????}
85????????????else
86????????????{
87????????????????base.Render(output);
88????????????}
89????????}
90????}
91}
92
?
編譯完成后部署到GAC中。
?
第三部、
修改DefaultTemplate.ascx文件,在文件頭部加入以下代碼:
<%@?Register?TagPrefix="ITSControls"?Assembly="ITS.SharePoint.WebControls,?Version=1.0.0.0,?Culture=neutral,?PublicKeyToken=f6cfe723df0de6cf"?namespace="ITS.SharePoint.WebControls"?%>?
接著搜索"SharePoint:ViewSelectorMenu",替換成"<ItsControls:CustomerViewMenu",最終改完效果如下:
<ITSControls:CustomerViewMenu?MenuAlignment="Right"?AlignToParent="true"?runat="server"?id="ViewSelectorMenu"?/>?
重啟IIS后,進入網(wǎng)站,在ListViewPermissionConfig列表中配置一條視圖權(quán)限信息。
說明:ViewGuid和Permission兩項必須填寫,列表默認(rèn)視圖無論是否配置權(quán)限都會顯示。
最終配置完的效果如下圖:
?
轉(zhuǎn)載于:https://www.cnblogs.com/Nirvanalst/archive/2009/07/07/1518023.html
總結(jié)
以上是生活随笔為你收集整理的通过代码解决SharePoint列表视图权限分配问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微信开发--自定义菜单
- 下一篇: 路由的导航守卫