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

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

开工:

第一步、

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

列表栏: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非空,则代表当前值是用户,相反则是用户组。
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}
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/Nirvanalst/archive/2009/07/07/1518023.html

通过代码解决SharePoint列表视图权限分配问题相关推荐

  1. (59) 解决在列表视图复制导致打开详细内容

    现象: 在列表视图中,当你要复制一个内容,就触发click事件,就打开form视图了 为了区分click mousedown mousemove muuseup 事件,从而放弃click事件 用后面那 ...

  2. 问题总结(一)使用代码调整SharePoint WebPart 视图和列表菜单

    最近在做项目的过程中,遇到个问题,创建一个SharePoint站点,在站点首页(default.aspx)添加了几个列表WebPart(ListViewWebPart),WebPart选用了自定义的视 ...

  3. 关于SharePoint中管理列表项权限

    现况概述在SharePoint中对于列表的权限默认是只可以控制到列表级别,而对于列表下面的列表项,在SharePoint中是无法进行控制的. 需求概述现在我参与的项目中需要控制一个文档库中的文档.让这 ...

  4. 在定义SharePoint列表的SPD数据视图的时候需要注意的问题

    为了开发的效率我们通常对SharePoint列表的新建.编辑等自带的ASPX表单进行自定义,但在实际的过程中,老是会出现莫名其妙的错误,从而造成开发有可能无限拖延. 首先,作为开发者,我们要清楚微软一 ...

  5. oracle添加创建视图权限不足,Oracle Scott创建视图权限不足解决办法

    Oracle Scott创建视图权限不足解决办法 在PL/SQL Developer数据库管理工具中,使用SCOTT用户帐号进行登录,新建SQL查询窗口,输入一条创建视图的SQL语句,随后弹出一个错误 ...

  6. oracle权限不足的报错,Oracle Scott创建视图权限不足解决办法

    大家安装了oracle数据库,按照oracle教程所说,使用scott用户登录,创建一个视图,有没有遇到错误提示:权限不足!,今天就告诉大家如何解决! 在PL/SQL Developer数据库管理工具 ...

  7. 给oracle scott权限,Oracle Scott创建视图权限不足解决办法

    在PL/SQL Developer数据库管理工具中,使用SCOTT用户帐号进行登录,新建SQL查询窗口,输入一条创建视图的SQL语句,随后弹出一个错误的提示信息:ORA-01031:权限不足. 上图所 ...

  8. 解决Oracle创建视图,权限不足的问题

    在scott用户创建视图的时候,出现错误 ORA-01031: 权限不足 具体解决方法如下: 1.使用dba用户登录 2.给scott用户创建视图的权限. --创建视图权限 grant create ...

  9. 使用代码设置Item级的权限(权限总结1)

    itle in english:set Item Level Permission for SharePoint  (MOSS/WSS) List/Document Library Programma ...

最新文章

  1. linux+用户的shell,Linux用户管理(十)Linux Shell高级
  2. 大数据在彩票预测和解决社会问题的用处
  3. [网络安全自学篇] 八十一.WHUCTF之WEB类解题思路WP(文件上传漏洞、冰蝎蚁剑、反序列化phar)
  4. CVPR 2019 | 西北工业大学开源拥挤人群数据集生成工具,大幅提升算法精度
  5. Flutter MaterialButton组件详细概述
  6. 容器服kubernetes_Kubernetes,标准化和安全性主导2017年Linux容器新闻
  7. 手把手教你在Windows环境下升级R
  8. C++ GUID和string转化函数【转载】
  9. 离散数学 习题篇 —— 关系的性质
  10. matlab的小波分析,MATLAB小波分析学习.pdf
  11. My Firest FireMonkey App
  12. “荣耀10X”更名背后的现实逻辑与未来风暴
  13. 微信公众号开发(4)-实现PC扫码登录
  14. 计算机组成原理实验 内容,计算机组成原理实验报告
  15. Nice 片 之 兄 dei 一起来看看 MMKV 。。。
  16. 金纳米粒子修饰MIL-101骨架材料(AuNPs/MIL-101)/负载COF-TpPa-1(Au NPs/COF-TpPa-1)|齐岳试剂
  17. 浙大数据结构:08-图7 公路村村通 (30 分)Prim与Kruskal算法
  18. C# 淘宝商品微信返利助手开发-(五)返利助手开发(3)淘口令如何通过API转换为链接
  19. FPGA基础知识18(在Quartus II下产生无源代码网表设计文件方法 QXP VQM 加密文件)
  20. 调用第三方接口开据发票

热门文章

  1. 计算机中丢失msc,mscvr120.dll32位/64位版_修复计算机中丢失msvcr120.dll
  2. HTML+CSS+JS实现 ❤️透明的水滴文字背景特效❤️
  3. MySQL表级完整性约束
  4. 如何设置MySQL的环境变量
  5. java计算棋盘上的麦粒
  6. java velocity 邮件_邮件集成java mail + 读取邮件模板
  7. matlab 动态目录调用程序集,C#中如何动态添加程序集查找目录
  8. Mysql 零距离-入门(三)数据类型
  9. Spring Boot Cache之缓存
  10. 线性规划 —— matlab