【问题标题】:Change permissions of a SharePoint list using JavaScript使用 JavaScript 更改 SharePoint 列表的权限
【发布时间】:2014-09-13 21:22:57
【问题描述】:

我有一个创建列表的应用程序。我希望该应用程序还将列表权限设置为仅允许管理员对列表进行更改。我知道如何隐藏列表,但我知道这不会阻止聪明的用户输入列表的 URL 并进行修改。

我看不到使用 JavaScript 更改列表权限的方法。我可用于列表的功能似乎不允许修改权限,但我可能忽略了正确的功能。

关于我应该查看哪些函数的任何指示?

【问题讨论】:

  • CSOM 是否是一项要求,或者您可以使用 JavaScript 对象模型 (JSOM) 或 SharePoint Web 服务吗?
  • JavaScript 对象模型很好。老实说,我不完全确定两者之间有什么区别,因为我听说 JSOM 被称为 CSOM,反之亦然。它变得混乱。无论哪种方式,可以在 SharePoint 托管的应用程序中完成的任何事情都适合我。

标签: javascript sharepoint csom sharepoint-online


【解决方案1】:

如何通过 JSOM 为 List 对象启用唯一权限

使用SP.SecurableObject.hasUniqueRoleAssignments property 确定角色分配是为 List 唯一定义还是继承自父安全对象。

使用SP.SecurableObject.breakRoleInheritance(copyRoleAssignments, clearSubscopes) Method 为 List 对象设置唯一的角色分配。

例子

var listTitle = 'Documents';
var context = SP.ClientContext.get_current();
var list = context.get_web().get_lists().getByTitle(listTitle);   

context.load(list,'HasUniqueRoleAssignments'); 
context.executeQueryAsync(
   function(){
      var hasUniqueAssgns = list.get_hasUniqueRoleAssignments();
      if(!hasUniqueAssgns) {
         list.breakRoleInheritance(false, true);
         context.executeQueryAsync(
            function(){
                console.log('Success');
            }, 
            function(sender,args){
               console.log(args.get_message());    
            }
         );
      }
   }, 
   function(sender,args){
      console.log(args.get_message());    
   }
);

如何通过 JSOM 为 List 对象授予自定义权限

以下示例演示如何中断 List 对象的角色继承并为当前用户授予 Full Control 权限

例子

var listTitle = 'Documents';
var context = SP.ClientContext.get_current();
var list = context.get_web().get_lists().getByTitle(listTitle);   
var currentUser = context.get_web().get_currentUser();

list.breakRoleInheritance(false, true); // break role inheritance first!

var roleDefBindingColl = SP.RoleDefinitionBindingCollection.newObject(context);
roleDefBindingColl.add(context.get_web().get_roleDefinitions().getByType(SP.RoleType.administrator));
list.get_roleAssignments().add(currentUser, roleDefBindingColl);

context.executeQueryAsync(
   function(){
      console.log('Success');
   }, 
   function(sender,args){
      console.log(args.get_message());    
   }
);

【讨论】:

  • 这应该在应用程序的主机网络中的列表上工作吗?当我尝试引用 hostweb 中列表的第二个代码的修改版本时,它给了我访问被拒绝的错误。
  • 好的。这确实在应用中起作用,但只有在您愿意为应用授予完全控制权限时。否则应用程序将收到拒绝访问错误消息。不幸的是,Microsoft 不允许在其市场中拥有完全控制权限的应用,因此如果您计划将您的应用提交到市场,则不能让它在 hostweb 中的列表上更改权限。
  • 扩展我在之前评论中所说的内容——如果您在与应用程序相同的网络中修改列表,我希望 Vadim 的示例能够正常工作。
猜你喜欢
  • 1970-01-01
  • 2010-11-07
  • 2019-08-15
  • 1970-01-01
  • 1970-01-01
  • 2017-06-18
  • 2018-09-30
  • 2021-06-02
  • 1970-01-01
相关资源
最近更新 更多