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字段應該允許多選。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章