IM 即时通讯
Android
开发指南

用户定制权限

更新时间: 2023/09/22 15:49:23

除了可以通过频道身份组对所有身份组成员在频道维度进行权限控制,也可以为频道成员专门定制权限,管控其在频道维度的操作。

用户定制权限定义

用户定制权限由QChatMemberRole接口定义。该接口的内置方法如下:

点击展开查看 QChatMemberRole 的内置方法
方法 返回数据类型 说明
getServerId long 返回身份组所属服务器的 ID
getId long 返回定制权限 ID
getAccid long 返回需要定制权限的用户的 IM 账号 (accid
getChannelId long 返回身份组所属的频道的 ID
getNick String 返回需要定制权限的成员在服务器的昵称
getAvatar String 返回需要定制权限的成员在服务器的头像 URL
getCustom String 返回自定义字段
getResourceAuths Map<QChatRoleResource, QChatRoleOption> 返回身份组的权限列表,其中:
  • QChatRoleResource的说明请参见身份组权限类型
  • QChatRoleOption定义了权限的配置状态(即用户能否访问各权限),包括:
    • ALLOW:有权限
    • DENY:无权限
    • INHERIT:继承(针对服务器自定义身份组来说,指继承自服务器的 @everyone 身份组)
getType QChatMemberType 返回成员类型
getJoinTime long 返回成员加入服务器的时间
getUpdateTime long 返回更新时间
getInviter long 返回邀请该成员的用户的 IM 账号(accid

前提条件

实现方法

uml diagram

创建定制权限

调用addMemberRole 方法为某个成员创建定制权限。新创建的定制权限配置默认继承自频道身份组相应权限的配置。

调用该方法必须先拥有MANAGE_ROLEMANAGE_CHANNEL权限,且是该频道的成员。如果没有权限,调用该方法将返回 403 错误码。

  • API 原型
InvocationFuture<QChatAddMemberRoleResult> addMemberRole(QChatAddMemberRoleParam param);
  • 示例代码
QChatChannel channel = getChannel();
NIMClient.getService(QChatRoleService.class).addMemberRole(new QChatAddMemberRoleParam(channel.getServerId(),channel.getChannelId(),"test")).setCallback(
        new RequestCallback<QChatAddMemberRoleResult>() {
            @Override
            public void onSuccess(QChatAddMemberRoleResult result) {
                //操作成功,返回添加成功的成员定制权限
                QChatMemberRole role = result.getRole();

            }

            @Override
            public void onFailed(int code) {
                //操作失败,返回错误code
            }

            @Override
            public void onException(Throwable exception) {
                //操作异常
            }
        });

修改定制权限

调用updateMemberRole可修改某成员的定制权限。

该方法的入参结构为QChatUpdateMemberRoleParam,需要传入所属的服务器 ID、频道 ID、目标成员的 IM 账号(accid)和需更新的权限 Map。

  • 调用该方法必须先拥有MANAGE_ROLE权限。如果没有该权限,调用该方法将返回 403 错误码。
  • 用户无法配置自己没有的权限。例如用户没有权限A,则无法修改权限A 的配置。
  • API 原型

    InvocationFuture<QChatUpdateMemberRoleResult> updateMemberRole(QChatUpdateMemberRoleParam param);
    
  • 示例代码

    QChatMemberRole memberRole = getMemberRole();
    Map<QChatRoleResource, QChatRoleOption> resourceAuths = new HashMap<>();
    resourceAuths.put(QChatRoleResource.DELETE_MSG,QChatRoleOption.ALLOW);
    NIMClient.getService(QChatRoleService.class).updateMemberRole(new QChatUpdateMemberRoleParam(memberRole.getServerId(),memberRole.getChannelId(),memberRole.getAccid(),resourceAuths)).setCallback(
            new RequestCallback<QChatUpdateMemberRoleResult>() {
                @Override
                public void onSuccess(QChatUpdateMemberRoleResult result) {
                    //操作成功,返回修改后的成员定制权限
                    QChatMemberRole role = result.getRole();
                }
    
                @Override
                public void onFailed(int code) {
                    //操作失败,返回错误code
                }
    
                @Override
                public void onException(Throwable exception) {
                    //操作异常
                }
            });
    

删除定制权限

调用removeMemberRole方法可将某人的定制权限删除。

该方法的入参结构为QChatRemoveMemberRoleParam,需要传入所属的服务器 ID、频道 ID、目标成员的 IM 账号(accid)。

调用该方法必须先拥有MANAGE_ROLEMANAGE_CHANNEL权限,且是该频道的成员。如果没有权限,调用该方法将返回 403 错误码。

  • API 原型
InvocationFuture<Void> removeMemberRole(QChatRemoveMemberRoleParam param);
  • 示例代码
QChatChannel channel = getChannel();
NIMClient.getService(QChatRoleService.class).removeMemberRole(new QChatRemoveMemberRoleParam(channel.getServerId(),channel.getChannelId(),"test")).setCallback(
        new RequestCallback<Void>() {
            @Override
            public void onSuccess(Void result) {
                //操作成功
            }

            @Override
            public void onFailed(int code) {
                //操作失败,返回错误code
            }

            @Override
            public void onException(Throwable exception) {
                //操作异常
            }
        });

查询定制权限

SDK 提供多个查询用户定制权限的方法,具体请参见用户定制权限相关查询

相关参考

相关系统通知

圈组系统通知的类型在QChatSystemNotificationType枚举中定义,与用户定制权限相关的内置系统通知类型如下:

枚举值 说明
MEMBER_ROLE_AUTH_UPDATE 更新“用户定制权限”

该系统通知的接收条件,请参见服务端文档的身份组权限相关事件通知

此文档是否对你有帮助?
有帮助
去反馈
  • 用户定制权限定义
  • 前提条件
  • 实现方法
  • 创建定制权限
  • 修改定制权限
  • 删除定制权限
  • 查询定制权限
  • 相关参考
  • 相关系统通知