用户定制权限
更新时间: 2024/05/16 18:49:04
除了可以通过频道身份组对所有身份组成员在频道维度进行权限控制,也可以为频道成员专门定制权限,管控其在频道维度的操作。
用户定制权限定义
用户定制权限由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 > |
返回身份组的权限列表,其中:
|
getType |
QChatMemberType |
返回成员类型 |
getJoinTime |
long | 返回成员加入服务器的时间 |
getUpdateTime |
long | 返回更新时间 |
getInviter |
long | 返回邀请该成员的用户的 IM 账号(accid ) |
前提条件
-
已注册
observeReceiveSystemNotification
监听圈组的系统通知。示例代码参见圈组系统通知收发。具体与用户定制权限相关的系统通知类型,见本文末尾的相关系统通知。
-
已创建服务器和频道。
实现方法
创建定制权限
调用addMemberRole
方法为某个成员创建定制权限。新创建的定制权限配置默认为频道身份组相应权限的配置。
调用该方法必须先拥有MANAGE_ROLE
和MANAGE_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_ROLE
和MANAGE_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 |
更新“用户定制权限” |
该系统通知的接收条件,请参见服务端文档的身份组权限相关事件通知。