SharePoint 列表权限控制

一提到sharepoint 我相信权限控制一定会是一个很重要的话题,尤其是对列表的权限控制,创建、修改、查看权限。其实网上这方面的资料已经很多了,尤其是以下2篇文章,后来索性把CodeArt_PermissionEx的源代码下载下来,然后仔细阅读了以下。

利用开源SharePoint Permission Extension插件对SharePoint 的列表进行权限控制!

通过代码解决SharePoint列表视图权限分配问题

要想完全明白源码设计的原理 建议大家先阅读再议WSS RenderingTemplate 对sharepoint模板覆盖有一个简单的了解。我把CodeArt_PermissionEx仔细阅读了一下并且修改了里面的一些代码(个人觉得原作者C#基本功一般,sharepoint方面还是不错,我这里修改的是VS2013版的源码)。修改后部署到sharepoint2013上如图:

内容内型权限设计如图:

这里的PersonType是一个自定义内容内型,每一个内型这里有一个人员和组的权限控制,主要控制user是否可以新建记录,比如user不在PersonType内容内型人员和组里面,那么这个user将不能创建记录,没有权限的user进入后看到的结果如图:

看到这里的新建项目变为不可用了。

这里说说查找权限的方式,首先我们需要的我们的设置保存起来,

1)根据我们的类容类型来找权限设置,如果没有任何权限设置那么我们就直接返回true;

2)如果当前用户是管理员用户直接返回true;

3)在指定的人员里面查找当前user是否存在,存在返回true;

4)指定的组里面是否包含当前user,存在返回true;否则返回false

相关代码如下:



 public bool CheckRight(SPUser user, string contentTypeName)
        {
            ContentTypeCreateSetting set = this.GetContentTypeCreateSetting(contentTypeName);

            if (set == null)
                return true;

            return set.CanCreate(user);
        }
 public bool CanCreate(SPUser currentUser)
        {
            if (currentUser != null && currentUser.IsSiteAdmin) return true;

            if (String.IsNullOrEmpty(this.SpecialAccounts) && String.IsNullOrEmpty(this.SpecialGroups))
                return true;

            if (currentUser == null)
            {
                return false;
            }

            bool inAccounts = this.IsInSpecialAccounts(currentUser.LoginName);

            if (inAccounts)
                return true;

            return this.IsInSpecialGroups(currentUser);
        }
    }

主要原理是新建列表数据默认用到的是NewMenu类,这里我们开发一个带有权限控制的子类NewMenuWithPermission,主要代码如下:



   public class NewMenuWithPermission : NewMenu
    {        

        private ListContentTypesCreateSetting _setting;
        bool _settingExist = true ;

        bool UserHaveRight(string cName)
        {
            if (!_settingExist)
                return true;

            if (_setting == null)
            {
                _setting = ListContentTypesCreateSetting.GeSetting(base.List);
                _settingExist = _setting != null;
            }

            if (_setting == null)
                return true ;

            return _setting.CheckRight(SPContext.Current.Web.CurrentUser, cName);

            //return true;
        }


        public override MenuItemTemplate AddMenuItem(string id, string displayName, string imageUrl, string description, string navigateUrl, string onClickScript)
        {          
            MenuItemTemplate m = base.AddMenuItem(id, displayName, imageUrl, description, navigateUrl, onClickScript);

            m.Visible = this.UserHaveRight(displayName);

            return m;
        }

         
    }

如何让sharepoint使用我们这个NewMenuWithPermission类,这里我们需要覆盖sharepoint的DocumentLibraryViewToolBar 和 ViewToolBar模板,相关代码如下:



<SharePoint:RenderingTemplate ID="DocumentLibraryViewToolBar" runat="server">
    <Template>
        <wssuc:ToolBar CssClass="ms-menutoolbar
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值