编辑:该应用程序需要在 Web 上具有管理权限才能正常工作
实际上我发现这是可能的。
您必须首先打破列表上的权限,然后为您想要的任何用户更改列表上的角色分配:
userList 是登录名列表,roleType 是 SP.RoleType ( https://msdn.microsoft.com/en-us/library/office/jj246683.aspx )
setUserListPermissionsBatch: function (listName, userList, roleType) {
"use strict";
Permissions.resetStored();
var context,
list,
roleDefBindingColl,
i,
oUser,
deferred;
deferred = new $.Deferred(function () {
if (userList && listName && roleType) {
// Create the role
context = SP.ClientContext.get_current();
list = context.get_web().get_lists().getByTitle(listName);
roleDefBindingColl = SP.RoleDefinitionBindingCollection.newObject(context);
roleDefBindingColl.add(context.get_web().get_roleDefinitions().getByType(roleType));
// Loop the users
for (i = 0; i < userList.length; i++) {
oUser = context.get_web().get_siteUsers().getByLoginName(userList[i]);
list.get_roleAssignments().add(oUser, roleDefBindingColl);
}
context.load(list);
context.executeQueryAsync(
function () {
return deferred.resolve();
},
function (sender, args) {
console.log(args.get_message());
return deferred.reject(args);
}
);
}
});
return deferred.promise();
},
要删除权限,我必须复制当前用户权限,删除我想要删除的权限,以便将该用户的其他权限保留在同一个列表中。
然后只需重新添加新角色:
/ Removes permissions for a user
removeUserListPermissions: function (listName, userLogin, roleType) {
"use strict";
var context,
list,
user,
userRoles,
x,
rolDefs,
newRoleCollection,
deferred;
deferred = new $.Deferred(function () {
if (userLogin && listName) {
context = SP.ClientContext.get_current();
list = context.get_web().get_lists().getByTitle(listName);
user = context.get_web().get_siteUsers().getByLoginName(userLogin);
userRoles = list.get_roleAssignments().getByPrincipal(user);
context.load(user);
context.load(list);
context.load(userRoles, 'RoleDefinitionBindings');
context.executeQueryAsync(Function.createDelegate(this, function () {
newRoleCollection = SP.RoleDefinitionBindingCollection.newObject(context);
for (x = 0; x < userRoles.get_roleDefinitionBindings().get_count() ; x++) {
rolDefs = userRoles.get_roleDefinitionBindings().itemAt(x);
if (rolDefs.get_roleTypeKind() !== roleType) {
newRoleCollection.add(rolDefs);
}
}
userRoles.deleteObject();
list.get_roleAssignments().add(user, newRoleCollection);
context.load(list);
context.executeQueryAsync(function () {
return deferred.resolve();
}, function (sender, args) {
console.log("Error deleted permissions: " + args.get_message());
return deferred.reject();
});
}),
function (sender, args) {
console.log(args.get_message());
return deferred.reject();
});
} else {
return deferred.resolve();
}
});
return deferred.promise();
}
要做我正在使用的组:
// Loop the groups
for (i = 0; i < groupList.length; i++) {
list.get_roleAssignments().add(context.get_web().get_siteGroups().getByName(groupList[i]), roleDefBindingColl);
}
而不是循环用户