我有一个创建列表的应用程序。我希望该应用程序还将列表权限设置为仅允许管理员对列表进行更改。我知道如何隐藏列表,但我知道这不会阻止聪明的用户输入列表的 URL 并进行修改。
我看不到使用 JavaScript 更改列表权限的方法。我可用于列表的功能似乎不允许修改权限,但我可能忽略了正确的权限。
关于我应该查看哪些功能的任何指示?
我有一个创建列表的应用程序。我希望该应用程序还将列表权限设置为仅允许管理员对列表进行更改。我知道如何隐藏列表,但我知道这不会阻止聪明的用户输入列表的 URL 并进行修改。
我看不到使用 JavaScript 更改列表权限的方法。我可用于列表的功能似乎不允许修改权限,但我可能忽略了正确的权限。
关于我应该查看哪些功能的任何指示?
使用SP.SecurableObject.hasUniqueRoleAssignments 属性来确定角色分配是为 List 唯一定义还是继承自父安全对象。
使用SP.SecurableObject.breakRoleInheritance(copyRoleAssignments, clearSubscopes) 方法为 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());
}
);
以下示例演示如何中断 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());
}
);