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

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


阅读更多
个人分类: sharepoint
上一篇客户端模型取List中PeopleorGroup中的LoginName
下一篇【C#】亚马逊S3云存储服务器文件上传笔记
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭