none
Проблема с Visual web part RRS feed

  • Вопрос

  • Добрый день! У меня есть обработчик событий который при добавлении документа в библиотеку перенаправляет пользователя на веб-форму с параметрами документа. В веб-форме отображаются группы текущего пользователя в виде Checkboxlist. Пользователь выбирает необходимые ему группы и нажимает кнопку Сохранить. После назначаются права на документ согласно выбранным группам. Проблема в том что права на документ не назначаться согласно выбранным группам. Вот код обработчика:

    using System;
    using System.Security.Permissions;
    using Microsoft.SharePoint;
    using Microsoft.SharePoint.Utilities;
    using Microsoft.SharePoint.Workflow;
    using System.Web;
    using System.IO;
    namespace SharePointProject3.EventReceiver2
    {
        /// <summary>
        /// События элемента списка
        /// </summary>
        public class EventReceiver2 : SPItemEventReceiver
        {
        private HttpContext _context;
        public EventReceiver2()
        {
            _context = HttpContext.Current;
        }
        public override void ItemAdding(SPItemEventProperties properties)
        {
            //Временно отключаем срабатывание обработчика
            EventFiringEnabled = false;
            //Получаем файл из HttpContext
                HttpPostedFile file = _context.Request.Files[0];
                Stream fileStream = file.InputStream;
                byte[] fileByte = new byte[file.ContentLength];
                fileStream.Read(fileByte, 0, file.ContentLength);
                //Загружаем файл в библиотеку документов
                SPFile fileUploded = properties.Web.Files.Add(properties.AfterUrl, fileByte);
                //Включаем обработчик обратно
                EventFiringEnabled = true;
                //Отменяем добавление файла, которое делал пользователь
                properties.Cancel = true;
                properties.Status = SPEventReceiverStatus.CancelWithRedirectUrl;
                //Деламе редирект
                properties.RedirectUrl = properties.Web.Url + "/test_perm/default.aspx?ID=" + fileUploded.UniqueId;
            }
        }
    
        }


    А вот код веб-части:

    using System;
    using System.ComponentModel;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using Microsoft.SharePoint;
    using Microsoft.SharePoint.WebControls;
    using System.Text;
    using Microsoft.SharePoint.Utilities;
    namespace CustomGroupAssignment.VisualWebPart1
    {
        public partial class VisualWebPart1UserControl : UserControl
        {
            protected void Page_Load(object sender, EventArgs e)
            {
                using (SPSite site = new SPSite("http://kviten:83/"))
                {
                    using (SPWeb web = site.OpenWeb())
                    {
                        SPUser currentUser = web.CurrentUser;
                        SPDocumentLibrary docLib = (SPDocumentLibrary)web.Lists["Test_Doc_Lib"];
                        SPGroupCollection webGroups = currentUser.Groups;
                        CheckBoxList1.DataSource = webGroups;
                        CheckBoxList1.DataValueField = "ID";
                        CheckBoxList1.DataTextField = "Name";
                        CheckBoxList1.DataBind();
                        foreach (ListItem li in CheckBoxList1.Items)
                        {
                            li.Selected = true;
                        }
                        try
                        {
                            string itemID = Page.Request.Params["ID"];
                            SPDocumentLibrary doclib = (SPDocumentLibrary)web.GetList(SPUrlUtility.CombineUrl(web.Url, "/DocLib2/Forms/AllItems.aspx"));
                            SPListItem item = doclib.GetItemByUniqueId(new Guid(itemID));
                         }
                        catch (Exception ex)
                        {
                            //Выводим ошибку
                        }
    
                    }
                }
            }
    
            protected void Button1_Click(object sender, EventArgs e)
            {
                using (SPSite site = new SPSite("http://kviten:83/"))
                {
                    using (SPWeb web = site.OpenWeb())
                    {
                        SPUser currentUser = web.CurrentUser;
                        SPDocumentLibrary docLib = (SPDocumentLibrary)web.Lists["Test_Doc_Lib"];
                          try
                        {
                            string itemID = Page.Request.Params["ID"];
                            SPDocumentLibrary doclib = (SPDocumentLibrary)web.GetList(SPUrlUtility.CombineUrl(web.Url, "/Test_Doc_Lib/"));
                            SPListItem item = doclib.GetItemByUniqueId(new Guid(itemID));
                            //Break the role inheritance from List and remove any RoleAssignments
                            //item.BreakRoleInheritance(false);
                            //while (item.RoleAssignments.Count > 0)
                            //{
                            //    item.RoleAssignments.Remove(0);
                            //}
                            if (!item.HasUniqueRoleAssignments)
                            {
                                item.ResetRoleInheritance();
                                item.Update();
                                item.BreakRoleInheritance(false);
                                item.Update();
                            }
                                foreach (ListItem li in CheckBoxList1.Items)
                            {
                                if (li.Selected) //Response.Write("- " + li.Text + "<br/>");
                                {
                                    // Give permissions to a specific group
                                    SPGroup group = web.Groups.GetByID(Convert.ToInt32(li.Value));
                                    SPPrincipal principalGroup = group;
                                    SPRoleAssignment roleassignment_group = new SPRoleAssignment(group);
                                    SPRoleAssignment roleAssignment = item.RoleAssignments.GetAssignmentByPrincipal(principalGroup);
                                    item.RoleAssignments.Add(roleAssignment);
                                    item.Update();
                                }
                            }
                       }
    
                       catch (Exception ex)
                       {
                            //Выводим ошибку
                        }
                        Context.Response.Write("<script type='text/javascript'>window.frameElement.commitPopup();</script>");
                        Context.Response.Flush();
                        Context.Response.End();
                    }
                }
            }
                protected void btnCancel_Click(object sender, EventArgs e)
            {
                Context.Response.Write("<script type='text/javascript'>window.frameElement.commitPopup();</script>");
                Context.Response.Flush();
                Context.Response.End();
             }
        }
    
    }


    Не могу понять почему не назначаются права на документ! Помогите пожалуйста!


    • Изменено Ruslan P 28 декабря 2012 г. 14:03
    28 декабря 2012 г. 13:53

Ответы

  • Правильное решение:

    using System;
    using System.ComponentModel;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using Microsoft.SharePoint;
    using Microsoft.SharePoint.WebControls;
    using System.Text;
    using Microsoft.SharePoint.Utilities;
    namespace CustomGroupAssignment.VisualWebPart1
    {
        public partial class VisualWebPart1UserControl : UserControl
        {
               protected void Page_Load(object sender, EventArgs e)
            {
                if (!IsPostBack) { 
                using (SPSite site = new SPSite("http://kviten:83/"))
                {
                    using (SPWeb web = site.OpenWeb())
                    {
                        SPUser currentUser = web.CurrentUser;
                        SPDocumentLibrary docLib = (SPDocumentLibrary)web.Lists["Test_Doc_Lib"];
                        SPGroupCollection webGroups = currentUser.Groups;
                        CheckBoxList1.DataSource = webGroups;
                        CheckBoxList1.DataValueField = "ID";
                        CheckBoxList1.DataTextField = "Name";
                        CheckBoxList1.DataBind();
                        foreach (ListItem li in CheckBoxList1.Items)
                        {
                            li.Selected = true;
                        }
                        try
                        {
                            string itemID = Page.Request.Params["ID"];
                            SPDocumentLibrary doclib = (SPDocumentLibrary)web.GetList(SPUrlUtility.CombineUrl(web.Url, "/DocLib2/Forms/AllItems.aspx"));
                            SPListItem item = doclib.GetItemByUniqueId(new Guid(itemID));
                        }
                        catch (Exception ex)
                        {
                            //Выводим ошибку
                        }
                    }
                    }
                }
            }
    
               protected void Button1_Click(object sender, EventArgs e)
               {
                   using (SPSite site = new SPSite("http://kviten:83/"))
                {
                    using (SPWeb web = site.OpenWeb())
                    {
                        SPUser currentUser = web.CurrentUser;
                        SPDocumentLibrary docLib = (SPDocumentLibrary)web.Lists["Test_Doc_Lib"];
                            string itemID = Page.Request.Params["ID"];
                            SPDocumentLibrary doclib = (SPDocumentLibrary)web.GetList(SPUrlUtility.CombineUrl(web.Url, "/Test_Doc_Lib/"));
                            SPListItem item = doclib.GetItemByUniqueId(new Guid(itemID));
                   foreach (ListItem li in CheckBoxList1.Items)
                   {
                       if (li.Selected) //Response.Write("- " + li.Text + "<br/>");
                       {
                                    if (!item.HasUniqueRoleAssignments)
                                    {
                                        item.ResetRoleInheritance();
                                        item.Update();
                                    }
                                    item.BreakRoleInheritance(false);
                                    item.Update();
                                    SPGroup group = web.Groups.GetByID(Convert.ToInt32(li.Value));
                                    SPPrincipal principalGroup = (SPPrincipal)group;
                                    //SPRoleAssignment roleassignment_group = new SPRoleAssignment(principalGroup);
                                    SPRoleAssignment roleAssignment = item.Web.RoleAssignments.GetAssignmentByPrincipal(principalGroup);
                                    item.RoleAssignments.Add(roleAssignment);
                                    item.Update();
                                   // var roleAssignment = new SPRoleAssignment(principalGroup);
                                  //  item.RoleAssignments.Add(roleAssignment);
                                   // item.Update();
                                    }
                            }
                   Context.Response.Write("<script type='text/javascript'>window.frameElement.commitPopup();</script>");
                   Context.Response.Flush();
                   Context.Response.End();
                       }
                   }
               }
    
            protected void btnCancel_Click(object sender, EventArgs e)
            {
                Context.Response.Write("<script type='text/javascript'>window.frameElement.commitPopup();</script>");
                Context.Response.Flush();
                Context.Response.End();
            }
        }
    }

    • Помечено в качестве ответа Ruslan P 10 января 2013 г. 9:39
    10 января 2013 г. 9:39

Все ответы

  • Если использовать //Response.Write("- " + li.Text + "<br/>"); который закоментирован, то можно увидеть что чекбоксы не выбираются и не выводятся. А права сбрасываются и устанавливаются только текущего пользователя без выбранных групп! В чем может быть причина?
    29 декабря 2012 г. 7:51
  • Переписал код вэб-части:

    using System;
    using System.ComponentModel;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using Microsoft.SharePoint;
    using Microsoft.SharePoint.WebControls;
    using System.Text;
    using Microsoft.SharePoint.Utilities;
    namespace CustomGroupAssignment.VisualWebPart1
    {
        public partial class VisualWebPart1UserControl : UserControl
        {
               protected void Page_Load(object sender, EventArgs e)
            {
                if (!IsPostBack) { 
                using (SPSite site = new SPSite("http://kviten:83/"))
                {
                    using (SPWeb web = site.OpenWeb())
                    {
                        SPUser currentUser = web.CurrentUser;
                        SPDocumentLibrary docLib = (SPDocumentLibrary)web.Lists["Test_Doc_Lib"];
                        SPGroupCollection webGroups = currentUser.Groups;
                        CheckBoxList1.DataSource = webGroups;
                        CheckBoxList1.DataValueField = "ID";
                        CheckBoxList1.DataTextField = "Name";
                        CheckBoxList1.DataBind();
                        foreach (ListItem li in CheckBoxList1.Items)
                        {
                            li.Selected = true;
                        }
                        try
                        {
                            string itemID = Page.Request.Params["ID"];
                            SPDocumentLibrary doclib = (SPDocumentLibrary)web.GetList(SPUrlUtility.CombineUrl(web.Url, "/DocLib2/Forms/AllItems.aspx"));
                            SPListItem item = doclib.GetItemByUniqueId(new Guid(itemID));
                        }
                        catch (Exception ex)
                        {
                            //Выводим ошибку
                        }
                    }
                    }
                }
            }
    
               protected void Button1_Click(object sender, EventArgs e)
               {
                   using (SPSite site = new SPSite("http://kviten:83/"))
                {
                    using (SPWeb web = site.OpenWeb())
                    {
                        SPUser currentUser = web.CurrentUser;
                        SPDocumentLibrary docLib = (SPDocumentLibrary)web.Lists["Test_Doc_Lib"];
                            string itemID = Page.Request.Params["ID"];
                            SPDocumentLibrary doclib = (SPDocumentLibrary)web.GetList(SPUrlUtility.CombineUrl(web.Url, "/Test_Doc_Lib/"));
                            SPListItem item = doclib.GetItemByUniqueId(new Guid(itemID));
                   foreach (ListItem li in CheckBoxList1.Items)
                   {
                       if (li.Selected) //Response.Write("- " + li.Text + "<br/>");
                       {
                                    if (!item.HasUniqueRoleAssignments)
                                    {
                                        item.ResetRoleInheritance();
                                        item.Update();
                                    }
                                    item.BreakRoleInheritance(false);
                                    item.Update();
                                    SPGroup group = web.Groups.GetByID(Convert.ToInt32(li.Value));
                                    SPPrincipal principalGroup = group;
                                    SPRoleAssignment roleassignment_group = new SPRoleAssignment(group);
                                    SPRoleAssignment roleAssignment = item.RoleAssignments.GetAssignmentByPrincipal(principalGroup);
                                    item.RoleAssignments.Add(roleAssignment);
                                    item.Update();
                                }
                            }
                   Context.Response.Write("<script type='text/javascript'>window.frameElement.commitPopup();</script>");
                   Context.Response.Flush();
                   Context.Response.End();
                       }
                   }
               }
    
            protected void btnCancel_Click(object sender, EventArgs e)
            {
                Context.Response.Write("<script type='text/javascript'>window.frameElement.commitPopup();</script>");
                Context.Response.Flush();
                Context.Response.End();
            }
        }
    }

    Теперь состояние checkbox-ов считывает но не назначает права на документ согласно выделенным группам. В строке

    SPRoleAssignment roleAssignment = item.RoleAssignments.GetAssignmentByPrincipal(principalGroup);

     выдает ошибку: "Значение не попадает в ожидаемый диапазон." Что может быть?

    9 января 2013 г. 14:08
  • Правильное решение:

    using System;
    using System.ComponentModel;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using Microsoft.SharePoint;
    using Microsoft.SharePoint.WebControls;
    using System.Text;
    using Microsoft.SharePoint.Utilities;
    namespace CustomGroupAssignment.VisualWebPart1
    {
        public partial class VisualWebPart1UserControl : UserControl
        {
               protected void Page_Load(object sender, EventArgs e)
            {
                if (!IsPostBack) { 
                using (SPSite site = new SPSite("http://kviten:83/"))
                {
                    using (SPWeb web = site.OpenWeb())
                    {
                        SPUser currentUser = web.CurrentUser;
                        SPDocumentLibrary docLib = (SPDocumentLibrary)web.Lists["Test_Doc_Lib"];
                        SPGroupCollection webGroups = currentUser.Groups;
                        CheckBoxList1.DataSource = webGroups;
                        CheckBoxList1.DataValueField = "ID";
                        CheckBoxList1.DataTextField = "Name";
                        CheckBoxList1.DataBind();
                        foreach (ListItem li in CheckBoxList1.Items)
                        {
                            li.Selected = true;
                        }
                        try
                        {
                            string itemID = Page.Request.Params["ID"];
                            SPDocumentLibrary doclib = (SPDocumentLibrary)web.GetList(SPUrlUtility.CombineUrl(web.Url, "/DocLib2/Forms/AllItems.aspx"));
                            SPListItem item = doclib.GetItemByUniqueId(new Guid(itemID));
                        }
                        catch (Exception ex)
                        {
                            //Выводим ошибку
                        }
                    }
                    }
                }
            }
    
               protected void Button1_Click(object sender, EventArgs e)
               {
                   using (SPSite site = new SPSite("http://kviten:83/"))
                {
                    using (SPWeb web = site.OpenWeb())
                    {
                        SPUser currentUser = web.CurrentUser;
                        SPDocumentLibrary docLib = (SPDocumentLibrary)web.Lists["Test_Doc_Lib"];
                            string itemID = Page.Request.Params["ID"];
                            SPDocumentLibrary doclib = (SPDocumentLibrary)web.GetList(SPUrlUtility.CombineUrl(web.Url, "/Test_Doc_Lib/"));
                            SPListItem item = doclib.GetItemByUniqueId(new Guid(itemID));
                   foreach (ListItem li in CheckBoxList1.Items)
                   {
                       if (li.Selected) //Response.Write("- " + li.Text + "<br/>");
                       {
                                    if (!item.HasUniqueRoleAssignments)
                                    {
                                        item.ResetRoleInheritance();
                                        item.Update();
                                    }
                                    item.BreakRoleInheritance(false);
                                    item.Update();
                                    SPGroup group = web.Groups.GetByID(Convert.ToInt32(li.Value));
                                    SPPrincipal principalGroup = (SPPrincipal)group;
                                    //SPRoleAssignment roleassignment_group = new SPRoleAssignment(principalGroup);
                                    SPRoleAssignment roleAssignment = item.Web.RoleAssignments.GetAssignmentByPrincipal(principalGroup);
                                    item.RoleAssignments.Add(roleAssignment);
                                    item.Update();
                                   // var roleAssignment = new SPRoleAssignment(principalGroup);
                                  //  item.RoleAssignments.Add(roleAssignment);
                                   // item.Update();
                                    }
                            }
                   Context.Response.Write("<script type='text/javascript'>window.frameElement.commitPopup();</script>");
                   Context.Response.Flush();
                   Context.Response.End();
                       }
                   }
               }
    
            protected void btnCancel_Click(object sender, EventArgs e)
            {
                Context.Response.Write("<script type='text/javascript'>window.frameElement.commitPopup();</script>");
                Context.Response.Flush();
                Context.Response.End();
            }
        }
    }

    • Помечено в качестве ответа Ruslan P 10 января 2013 г. 9:39
    10 января 2013 г. 9:39