设为首页 收藏本站
查看: 1316|回复: 0

[经验分享] 通过代码解决SharePoint列表视图权限分配问题

[复制链接]

尚未签到

发表于 2015-9-26 07:02:47 | 显示全部楼层 |阅读模式
  最近被SharePoint列表视图分权限的问题困扰着,在网上搜到些解决方案,比较不错的是Bewise.SharePoint.SPViewPermissionSetting的解决方案,但是在修改视图权限配置的时候经常出问题,不知道是什么原因,后来从codeplex上找到了这个解决方案的源码,下来学习一下,总结如下:
  它是通过自定义WebControl来修改ListViewWebPart的ViewSelector模板实现视图权限过滤的。
  开工:
  第一步、
  先建个ListViewPermissionConfig列表,用来存放视图权限的配置信息。
  列表栏:ListName(单行文本)、ViewName(单行文本)、ViewGuid(单行文本)、Permission(人员或用户组,允许多选)。
  第二步、
  开写代码,示意代码如下:
  

1 DSC0000.gif using 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 DSC0001.gif DSC0002.gif DSC0003.gif {
11 DSC0004.gif     public class CustomerViewMenu : ViewSelectorMenu
12 DSC0005.gif DSC0006.gif     {
13        /**//// <summary>
14        /// 用户是否可以查看此时图
15        /// </summary>
16        /// <param name="viewID"></param>
17        /// <param name="userOrGroup"></param>
18 DSC0007.gif         /// <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非空,则代表当前值是用户,相反则是用户组。
41                                if (value.User != null)
42                                {
43                                    if (currentUser.LoginName.Equals(value.User.LoginName))
44                                        return true;
45                                }
46                                else
47                                {
48                                    //判断当前用户是否在用户组中
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 DSC0008.gif }
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两项必须填写,列表默认视图无论是否配置权限都会显示。
  最终配置完的效果如下图:
DSC0009.gif
DSC00010.gif
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-118824-1-1.html 上篇帖子: Sharepoint学习笔记---如何在Sharepoint2010网站中整合Crystal Report水晶报表(显示图片) 下篇帖子: [转] sharePoint 2007下载
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表