如何:通过 JavaScript 使用角色
上次修改时间: 2011年6月20日
适用范围: SharePoint Foundation 2010
本文内容
使用 JavaScript 创建角色定义
使用 JavaScript 为网站上的角色分配用户
使用 JavaScript 创建一个 SharePoint 组,并将该组添加到角色中
通过客户端对象模型,可以在网站集内创建自定义角色定义,并可以为网站、列表和列表项的特定角色分配新的或现有的用户和组。与在服务器对象模型中使用 SPRoleDefinitionBindingCollection 类相似,将用户或组连同 RoleDefinitionBindingCollection 对象一起添加到针对特定对象的角色分配集合。
使用 JavaScript 创建角色定义
若要使用 ECMAScript(JavaScript、JScript)在网站集的角色定义集合中创建角色定义,请使用 BasePermissions 对象定义一个权限集,使用 RoleDefinitionCreationInformation 对象定义一个包含该权限集的角色,然后将此新角色添加到角色定义集合中。下面的示例演示如何创建用于创建和管理警报的角色。order 属性指定此新角色在网站集的"权限级别"页上列出的自定义角色定义中排在第四位。
siteUrl = '/sites/MySiteCollection';
function createRoleDefinition() {
var clientContext = new SP.ClientContext(siteUrl);
var oWebsite = clientContext.get_web();
var permissions = new SP.BasePermissions();
permissions.set(SP.PermissionKind.createAlerts);
permissions.set(SP.PermissionKind.manageAlerts);
var roleCreationInfo = new SP.RoleDefinitionCreationInformation();
roleCreationInfo.set_basePermissions(permissions);
roleCreationInfo.set_description('A new role with create and manage alerts permission');
roleCreationInfo.set_name('Create and Manage AlertsT');
roleCreationInfo.set_order(4);
this.oRoleDefinition = oWebsite.get_roleDefinitions().add(roleCreationInfo);
clientContext.load(oRoleDefinition);
clientContext.executeQueryAsync(
Function.createDelegate(this, this.onQuerySucceeded),
Function.createDelegate(this, this.onQueryFailed));
}
function onQuerySucceeded() {
var roleInfo = oRoleDefinition.get_name() + ' role created.';
alert(roleInfo);
}
function onQueryFailed(sender, args) {
alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
}
使用 JavaScript 为网站上的角色分配用户
若要为网站上的特定角色分配用户,可以为网站上下文创建 RoleDefinitionBindingCollection 对象,向绑定集合对象添加角色定义,然后使用 add(principal, roleBindings) 函数将用户连同绑定集合一起添加到网站的角色分配中。在下面的示例中,将为上一示例中定义的角色分配现有网站集用户。
siteUrl = '/sites/MySiteCollection/MyWebSite';
function addUserToRole() {
var clientContext = new SP.ClientContext(siteUrl);
var oWebsite = clientContext.get_web();
this.oUser = oWebsite.get_siteUsers().getByLoginName('DOMAIN\\alias');
this.oRoleDefinition = oWebsite.get_roleDefinitions().getByName('Create and Manage Alerts');
var collRoleDefinitionBinding = SP.RoleDefinitionBindingCollection.newObject(clientContext);
collRoleDefinitionBinding.add(oRoleDefinition);
var oRoleAssignment = oWebsite.get_roleAssignments().add(oUser, collRoleDefinitionBinding);
clientContext.load(oUser, 'Title');
clientContext.load(oRoleDefinition, 'Name');
clientContext.executeQueryAsync(
Function.createDelegate(this, this.onQuerySucceeded),
Function.createDelegate(this, this.onQueryFailed));
}
function onQuerySucceeded() {
var roleInfo = oUser.get_title() + ' assigned to ' + oRoleDefinition.get_name();
alert(roleInfo);
}
function onQueryFailed(sender, args) {
alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
}
使用 JavaScript 创建一个 SharePoint 组,并将该组添加到角色中
与通过客户端对象模型创建大多数其他对象一样,使用 GroupCreationInformation 对象定义一个新组,然后使用 add(parameters) 函数将该组添加到网站集的网站组集合中。如同为角色分配用户一样,通过以下方式为网站上的特定角色分配一个组:为网站上下文创建 RoleDefinitionBindingCollection 对象,将角色定义添加到绑定集合对象中,然后使用 add(principal, roleBindings) 函数将该组连同绑定集合一起添加到网站的角色分配中。下面的示例将创建一个组,并将该组分配给网站上的 Contribute 角色。
var siteUrl = '/sites/MySiteCollection/MyWebSite';
function createGroupAddToRole() {
var clientContext = new SP.ClientContext(siteUrl);
this.oWebsite = clientContext.get_web();
var groupCreationInfo = new SP.GroupCreationInformation();
groupCreationInfo.set_title('My New GroupT');
groupCreationInfo.set_description('Description of new group.');
this.oGroup = oWebsite.get_siteGroups().add(groupCreationInfo);
var collRoleDefinitionBinding = SP.RoleDefinitionBindingCollection.newObject(clientContext);
this.oRoleDefinition = oWebsite.get_roleDefinitions().getByType(SP.RoleType.contributor);
collRoleDefinitionBinding.add(oRoleDefinition);
var collRollAssignment = oWebsite.get_roleAssignments();
collRollAssignment.add(oGroup, collRoleDefinitionBinding);
clientContext.load(oGroup, 'Title');
clientContext.load(oRoleDefinition, 'Name');
clientContext.executeQueryAsync(
Function.createDelegate(this, this.onQuerySucceeded),
Function.createDelegate(this, this.onQueryFailed));
}
function onQuerySucceeded() {
var roleInfo = oGroup.get_title() + ' created and assigned to ' + oRoleDefinition.get_name();
alert(roleInfo);
}
function onQueryFailed(sender, args) {
alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
}