SharePoint:自定义默认NewForm.aspx并根据给定的权限隐藏一些字段

时间:2016-06-10 10:16:49

标签: c# sharepoint sharepoint-2013

我的要求是限制用户根据其给定的组/权限查看/添加/编辑列表的字段。为了达到这个目的,按照我的理解,我必须生成自定义列表表单。如果有人可以帮我定制NewFrom.Aspx和代码,我们可以检查当前用户组/权限并隐藏他不应该访问的字段。

我在谷歌搜索后得到了解决方案,并且在创建新的自定义列表表单后考虑应用以下内容。我想知道这种方法是否足够好,或者给它任何最佳解决方案。

        var web = SPContext.Current.Web;
        web.AllowUnsafeUpdates = true;
        web.Update();
        var lists = web.Lists["SomeList"];
        var f = lists.Fields["SomeField"];
        if(){ //to check if user is in role
        f.ShowInEditForm = false;
        f.ShowInNewForm = false;
        f.Update();
        }

相同的列表将用于交叉所有用户,因此我认为上述解决方案可能不是最佳的。

提前致谢。

1 个答案:

答案 0 :(得分:1)

由于 SharePoint不支持列级权限,因此有一些第三方工具可用于列级权限:

对于自定义NewForm

  • 您可以为NewForm开发自定义webpart,您可以根据权限显示字段。
  • 然后将此webpart设置为默认的NewForm.aspx,因此当用户单击列表的 NewItem 链接时,它将打开自定义webpart而不是默认的sharepoint表单。
  • 您可以使用以下代码替换默认的NewForm webpart和自定义webpart:

      
    public override void FeatureActivated(SPFeatureReceiverProperties properties)
            {
                SPWeb currentWeb = (SPWeb)properties.Feature.Parent;
                try
                {
                SPLimitedWebPartManager NewForm = currentWeb.GetLimitedWebPartManager("Lists/listname1/NewForm.aspx", System.Web.UI.WebControls.WebParts.PersonalizationScope.Shared);
                AddWebPart(NewForm);
                }
                catch (Exception)
                {
                    throw;
                }
              }
    protected void AddWebPart(SPLimitedWebPartManager MainPage)
        {
            MainPage.WebParts[0].Hidden = true;
            MainPage.SaveChanges(MainPage.WebParts[0]);
            try
            {
                var linqqry = from wp in MainPage.WebParts.Cast()
                              where wp.GetType() == typeof(Webpart1.Webpart1)
                              select wp;
    
    
            if (linqqry.Count() == 0)
            {
                //Create an instance of WPMenu Webpart and add in a Webpart zone
                Webpart1.Webpart1 wpWebPart = new Webpart1.Webpart1();
                MainPage.AddWebPart(wpWebPart, "Main", 0);
                MainPage.SaveChanges(wpWebPart);
            }
            }
            catch (Exception ex)
            {
            }
    }