【问题标题】:Cannot set permission for documents on Visual web part Sharepoint 2010 Foundation无法为 Visual Web 部件 Sharepoint 2010 Foundation 上的文档设置权限
【发布时间】:2012-12-14 08:26:26
【问题描述】:

美好的一天!我有一个事件处理程序,当您将文档添加到库时,它会将用户重定向到带有文档参数的 Web 表单。在 web 表单中,它以 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;
        }
    }

    }

这是 Web 部件的代码:

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();
         }
    }
}

我不明白为什么我不能为文档分配权限!请帮忙! 如果使用注释掉的/ / Response.Write ("-" + li.Text + "&lt;br/&gt;");,我们可以看到复选框没有被选中,也没有显示出来。 item.ResetRoleInheritance();执行并仅将权限分配给没有组的当前用户。可能是什么原因?

【问题讨论】:

    标签: visual-studio-2010 sharepoint-2010 permissions web-parts


    【解决方案1】:

    Web 部件的正确解决方案:

    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();
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2013-05-26
      • 1970-01-01
      • 2011-03-06
      • 2011-01-28
      • 1970-01-01
      • 1970-01-01
      • 2011-10-10
      • 2023-03-22
      • 1970-01-01
      相关资源
      最近更新 更多