使用JavaScript更改SharePoint列表的权限

使用JavaScript更改SharePoint列表的权限,javascript,sharepoint,csom,sharepoint-online,Javascript,Sharepoint,Csom,Sharepoint Online,我有一个创建列表的应用程序。我希望应用程序也设置列表权限,只允许管理员对列表进行更改。我知道如何隐藏列表,但我知道这不会阻止聪明的用户键入列表的URL并进行修改 我看不到用JavaScript更改列表权限的方法。我可以使用的列表功能似乎不允许修改权限,但我可能忽略了正确的权限 关于我应该查看哪些函数的任何指针?如何通过JSOM为列表对象启用唯一权限 用于确定角色分配是为列表唯一定义的还是从父安全对象继承的 用于设置列表对象的唯一角色分配 范例 var listTitle = 'Documents

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

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

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

如何通过JSOM为列表对象启用唯一权限 用于确定角色分配是为列表唯一定义的还是从父安全对象继承的

用于设置列表对象的唯一角色分配

范例

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());    
   }
);
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());    
   }
);
如何通过JSOM为列表对象授予自定义权限 下面的示例演示如何断开列表对象的角色继承,并为当前用户授予
完全控制权
权限

范例

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

CSOM是一项要求,还是可以使用JavaScript对象模型(JSOM)或SharePoint Web Services?JavaScript对象模型很好。老实说,我不完全确定两者之间的区别,因为我听说JSOM被称为CSOM,反之亦然。这让人困惑。无论哪种方式,在SharePoint托管的应用程序中可以完成的任何操作都适用于我。这是否适用于应用程序主机Web中的列表?当我尝试引用hostweb.Ok中列表的第二个代码的修改版本时,它会给我一个拒绝访问错误。这在应用程序中确实有效,但前提是您愿意授予应用程序完全控制权限。否则,应用程序将收到拒绝访问错误消息。不幸的是,Microsoft不允许在其市场中使用具有完全控制权限的应用程序,因此如果您计划将应用程序提交到市场,您不能让它更改hostweb中列表的权限。请扩展我在上一篇评论中所说的内容——如果您在与应用程序相同的web中修改列表,我希望Vadim的示例可以正常工作。