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字段应该允许多选。


相关文章推荐

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

Building Coder 链接:http://thebuildingcoder.typepad.com/blog/2010/09/filter-for-view-and-phase.html R...

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

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

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

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

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

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

【连载】 .Net cad二次开发(三)

接着来看cad相关的具体操作:文档操作、实体操作、表、事物。 一、文档的基本操作 1.当前文档基本操作 // 当前文档 Document docCur = Auto...

3D打印软件Cura的二次开发(GUI)--环境搭建

3D打印软件Cura的二次开发(GUI)--环境搭建   软体动物Ai 关注 2016.07.06 12:36* 字数 1639 阅读 1300评论 8喜欢 4 ...

libSVM(Java)二次开发接口调用及更改的文档

原文链接:点击打开链接 文档整理:陈伟 chenweishaoxing#163.com 下载libsvm 方法:google libsvm找到官网下载: http://www.csie.ntu...

利用C#进行AutoCAD的二次开发(一)

 http://udeulkny.blog.com http://kgokjppj.blog.com http://zsxapa.blog.com http://kepzoxm.blog....
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:sharepoint视图权限控制器二次开发
举报原因:
原因补充:

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