sharepoint视图权限控制器二次开发

原创 2016年02月06日 12:44:32

<pre name="code" class="html">

将近年关,不高兴做事情,所以研究了一会SharePoint的视图权限控制,之前网上下了一个MOSS2007的视图权限wsp包,因为自己使用的环境主要是sharepoint 2013,所以界面上很不友好,决定自己写一个视图权限的东西。在这里顺手记录下了开发过程中的一些心得和体会,如有不对的地方,还请各位大神多多提点。我这个想法主要基于SharePoint下Web Part的开发。在每个视图页面添加一个权限过滤webpart,然后根据本站点的list来判断权限是否正确。

先通过VS新建了一个sharepoint visual webpart 2013,然后在usercontroller代码中贴入

 public VisualWebPart1 WebPart { get; set; }
        protected void Page_Load(object sender, EventArgs e)
        {
            if (CanSeeView(WebPart.listname, WebPart.viewname, SPContext.Current.Site.OpenWeb().CurrentUser) == false)
            {
                SPUtility.TransferToErrorPage("您没有权限访问此视图.");
            }      
        }

        //// <summary>
        /// 用户是否可以查看此时图
        /// </summary>
        /// <param name="viewID"></param>
        /// <param name="userOrGroup"></param>
        /// <returns></returns>
        private bool CanSeeView(string list, string view, SPUser currentUser)
        {
            try
            {
                if (view == "test")
                {
                    return true;
                }
                SPWeb web = SPContext.Current.Web;
                SPList listViewConfig = web.Lists["ListViewPermissionConfig"];
                string strQuery = string.Format("<Where><And><Eq><FieldRef Name='ListName' /><Value Type='Text'>{0}</Value></Eq><Eq><FieldRef Name='ViewName' /><Value Type='Text'>{1}</Value></Eq></And></Where>", list.ToString(),view.ToString());
                SPQuery query = new SPQuery();
                query.Query = strQuery;
                SPListItemCollection items = listViewConfig.GetItems(query);
                if (items.Count > 0)
                {
                    foreach (SPListItem item in items)
                    {
                        //SPFieldUserValue[] userValues = item["Permission"] as SPFieldUserValue[];
                        object obj = item["Permission"];
                        SPFieldUserValueCollection userValues = (SPFieldUserValueCollection)obj;
                        foreach (SPFieldUserValue value in userValues)
                        {
                            //如果value.User非空,则代表当前值是用户,相反则是用组。
                            if (value.User != null)
                            {
                                if (currentUser.LoginName.Equals(value.User.LoginName))
                                    return true;
                            }
                            else
                            {
                                //判断当前用户是否在用户组中
                                SPGroup group = web.Groups.GetByID(value.LookupId);
                                foreach (SPUser user in group.Users)
                                {
                                    if (currentUser.LoginName.Equals(user.LoginName))
                                        return true;
                                }
                            }
                        }
                    }
                }
                return false;
            }
            catch (Exception e){
                 return false;
            }

记得要引用

using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls;
using Microsoft.SharePoint.Utilities;
然后在Webpart 代码中贴入

 protected override void CreateChildControls()
        {
            VisualWebPart1UserControl control = Page.LoadControl(_ascxPath) as VisualWebPart1UserControl;
            //添加自定义属性
            if (control != null)
            {
                control.WebPart = this;
            }
            Controls.Add(control);
        }

        private string listN = "test";
        private string viewN = "test";
        [Personalizable(), WebBrowsable]
        public string listname 
        {
            get
            {
                return listN;
            }
            set
            {
                listN = value;
            }
        }
        [Personalizable(), WebBrowsable]
        public string viewname 
        {
            get
            {
                return viewN;
            }
            set
            {
                viewN = value;
            }
        }


其实并不困难。期间需要注意的应该是权限表的Permission字段应该允许多选。


金蝶K3用户数据权限之二次开发接入

金蝶K3用户数据权限之二次开发接入。 金蝶K3可以设置用户的数据权限,例如业务员对客户信息是敏感的,全部业务员虽然都可以打开销售订单模块,但不是他跟进的客户的订单是无法在序时簿中查看到的。 介绍二次开...
  • tangzhongxin
  • tangzhongxin
  • 2015年05月23日 10:54
  • 4560

SharePoint 列表权限控制

一提到sharepoint 我相信权限控制一定会是一个很重要的话题,尤其是对列表的权限控制,创建、修改、查看权限。其实网上这方面的资料已经很多了,尤其是以下2篇文章,后来索性把CodeArt_Perm...
  • dz45693
  • dz45693
  • 2014年03月26日 22:50
  • 2089

彻底搞懂SharePoint List Threshold(列表阈值)

原文链接:点击打开链接
  • shrenk
  • shrenk
  • 2014年09月13日 07:17
  • 2069

Building Coder(Revit 二次开发)- 在新建族中进行镜像操作,并切换当前视图

原文链接(The Building Coder: Jeremy Tammik)   我们的目标是在一个新建的族中,对一个Family Instance进行镜像。我们已经讨论过【元素镜像】和【访...
  • flower4wine
  • flower4wine
  • 2011年08月15日 23:21
  • 1613

Building Coder(Revit 二次开发) - 针对视图和阶段进行过滤

Building Coder 链接:http://thebuildingcoder.typepad.com/blog/2010/09/filter-for-view-and-phase.html R...
  • flower4wine
  • flower4wine
  • 2011年09月09日 17:29
  • 565

SolidWorks二次开发-获取零件信息(装配体下零件信息)、截取零件等轴测视图图片

c#: using System; using System.Collections.Generic; using System.Linq; using System.Text; using S...
  • tianlovesweet
  • tianlovesweet
  • 2018年01月08日 13:50
  • 13

Revit二次开发之“显示或隐藏视图中未选中的元素”

方法是先隐藏全部元素,再显示选中的。  转自:http://revit.5d6d.com/thread-1094-1-1.html //显示或隐藏视图中未选中的元素 [Transacti...
  • hqx2008
  • hqx2008
  • 2012年10月20日 11:48
  • 1276

ASP.NET WebForm通用权限系统框架源码 二次开发框架 .net框架

  • 2017年12月27日 14:40
  • 41.43MB
  • 下载

ecshop二次开发文档之增加操作菜单和权限

  • 2015年05月22日 09:57
  • 795B
  • 下载

安川机器人DX100控制器二次开发MotoCom SDK

  • 2013年11月02日 16:06
  • 583KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:sharepoint视图权限控制器二次开发
举报原因:
原因补充:

(最多只允许输入30个字)