如何:通过 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());
}

请参阅

概念

如何:通过 JavaScript 使用用户和组

如何:使用 JavaScript 打破角色分配继承关系

授权、用户和组

数据检索概述

创建客户端对象

客户端对象模型准则

JavaScript 对象模型中的常见编程任务

其他资源

ECMAScript 类库