通过代码解决SharePoint列表视图权限分配问题【转】

news/2024/5/19 20:29:30

最近被SharePoint列表视图分权限的问题困扰着,在网上搜到些解决方案,比较不错的是Bewise.SharePoint.SPViewPermissionSetting的解决方案,但是在修改视图权限配置的时候经常出问题,不知道是什么原因,后来从codeplex上找到了这个解决方案的源码,下来学习一下,总结如下:

它是通过自定义WebControl来修改ListViewWebPart的ViewSelector模板实现视图权限过滤的。

开工:

第一步、

先建个ListViewPermissionConfig列表,用来存放视图权限的配置信息。

列表栏:ListName(单行文本)、ViewName(单行文本)、ViewGuid(单行文本)、Permission(人员或用户组,允许多选)。

第二步、

开写代码,示意代码如下:

 

 1 using  System;
 2 using  System.Collections.Generic;
 3 using  System.Text;
 4 using  System.Web.UI;
 5
 6 using  Microsoft.SharePoint;
 7 using  Microsoft.SharePoint.WebControls;
 8
 9 namespace  ITS.SharePoint.WebControls
10 ExpandedBlockStart.gifContractedBlock.gif {
11    public class CustomerViewMenu : ViewSelectorMenu
12ExpandedSubBlockStart.gifContractedSubBlock.gif    {
13ExpandedSubBlockStart.gifContractedSubBlock.gif        /**//// <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)
20ExpandedSubBlockStart.gifContractedSubBlock.gif        {
21            bool b = false;
22            using (SPSite site = new SPSite("http://liust-server:100"))
23ExpandedSubBlockStart.gifContractedSubBlock.gif            {
24                using (SPWeb icmWeb = site.AllWebs["ITSImportanceCustomerManagement"])
25ExpandedSubBlockStart.gifContractedSubBlock.gif                {
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)
33ExpandedSubBlockStart.gifContractedSubBlock.gif                    {
34                        foreach (SPListItem item in items)
35ExpandedSubBlockStart.gifContractedSubBlock.gif                        {
36                            object obj = item["Permission"];
37                            SPFieldUserValueCollection userValues = (SPFieldUserValueCollection)obj;
38                            foreach (SPFieldUserValue value in userValues)
39ExpandedSubBlockStart.gifContractedSubBlock.gif                            {
40                                //如果value.User非空,则代表当前值是用户,相反则是用户组。
41                                if (value.User != null)
42ExpandedSubBlockStart.gifContractedSubBlock.gif                                {
43                                    if (currentUser.LoginName.Equals(value.User.LoginName))
44                                        return true;
45                                }

46                                else
47ExpandedSubBlockStart.gifContractedSubBlock.gif                                {
48                                    //判断当前用户是否在用户组中
49                                    SPGroup group = icmWeb.Groups.GetByID(value.LookupId);
50                                    foreach(SPUser user in group.Users)
51ExpandedSubBlockStart.gifContractedSubBlock.gif                                    {
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)
65ExpandedSubBlockStart.gifContractedSubBlock.gif        {
66            if (this.Visible && !SPContext.Current.Web.CurrentUser.IsSiteAdmin)
67ExpandedSubBlockStart.gifContractedSubBlock.gif            {
68                foreach (Control item in base.MenuTemplateControl.Controls)
69ExpandedSubBlockStart.gifContractedSubBlock.gif                {
70                    try
71ExpandedSubBlockStart.gifContractedSubBlock.gif                    {
72                        if ((item is MenuItemTemplate) && (SPContext.Current.List.Views[((MenuItemTemplate)item).Text]) != null)
73ExpandedSubBlockStart.gifContractedSubBlock.gif                        {
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                    }

81ExpandedSubBlockStart.gifContractedSubBlock.gif                    catch (Exception) { }
82                }

83                base.Render(output);
84            }

85            else
86ExpandedSubBlockStart.gifContractedSubBlock.gif            {
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后,进入网站,在ListViewPermissionConfig列表中配置一条视图权限信息。

说明:ViewGuid和Permission两项必须填写,列表默认视图无论是否配置权限都会显示。

最终配置完的效果如下图:

 

转载于:https://www.cnblogs.com/ahjxxy/archive/2010/07/23/1783765.html


http://www.niftyadmin.cn/n/3089500.html

相关文章

Zabbix - 配置服务器对第三方服务的监控

需求&#xff1a; 需要配置zabbix监控&#xff0c;使得zabbix服务器可以监控到另一台服务器上运行的第三方服务的状态&#xff0c;当状态异常时发送告警邮件。 限制&#xff1a;被监控的服务器不允许安装任意客户端&#xff0c;且该台服务器不能联通外网 对zabbix的各种监控方式…

【原】小软件开发心得(二)——推广、测试

正如上一篇文章最后所述&#xff0c;相比开发软件本身&#xff0c;推广软件技术含量似乎更高&#xff0c;而测试则是更耗体力的工作。 推广 让自己的软件被更多的人使用&#xff0c;这可能是很多开发者的心愿&#xff0c;而且这往往和经济利益什么的不搭界&#xff0c;纯粹是一…

php+html+转码,PHP解析html类库simple_html_dom的转码bug

这几天有在用simple_html_dom抓一些文章。不同网站的编码在国内基本上是gbk gb2312 utf-8。而以gb2312和utf-8居多。我这一版的simple_html_dom有一个方法 convert_text 是这个样子的。// PaperG - Function to convert the text from one character set to another if the two…

个人常用的linux/unix命令

私人mac配置环境变量文件位置&#xff1a;个人用户下&#xff1a; vim /etc/profile 建议环境变量文件位置: touch ~/.bash_profile 复制代码删除文件rm [options] [fileName] -r : 递归删除子目录 -f : 禁用确认 -i : 删除前逐一询问确认 -v : 显示删除细节 复制代码移动文件夹…

不畏将来

自己的人生道路&#xff0c;除了自己&#xff0c;没有任何人可以为之负责。去相信所有遇到的人都是人生中注定要遇到的人&#xff0c;遇到喜欢的人&#xff0c;就认真的爱吧&#xff0c;遇到不喜欢的人&#xff0c;也认真的对待&#xff0c;不辜负这番注定的缘分。人生中所有经…

第三讲 多重背包问题(对背包九讲的学习)

题目 有N种物品和一个容量为V的背包。第i种物品最多有n[i]件可用&#xff0c;每件费用是c[i]&#xff0c;价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量&#xff0c;且价值总和最大。 基本思路: 对每个物品都考虑拿几个(这个很好理解) 递推式:f[i][…

分页插件php,PHP框架Laravel插件Pagination实现自定义分页

Laravel 的分页很方便&#xff0c;其实扩展起来也挺容易的&#xff0c;下面就来做个示例&#xff0c;扩展一下 paginate() 和 simplePaginate() 方法&#xff0c;来实现我们自定义分页样式&#xff0c;比如显示 "上一页" 和 "下一页" &#xff0c;而不是 &…

项目Alpha冲刺 Day9

1&#xff09;站立式会议&#xff1a; 2&#xff09;今日安排&#xff1a; 计划完成活动开始与活动结束两个模块&#xff08;苏华、赵晓南&#xff09;&#xff0c;具体活动详情页面&#xff08;范媛媛&#xff09;以及今日完成对应模块的相关测试&#xff08;陶涛&#xff09;…