如何实现评论仅在作者具备特定角色时生效且不在DM场景运行
分模块实现方案
1. 实现DM场景的逻辑隔离
所有评论功能的触发入口做最前置的拦截判断,从根源上避免整套评论逻辑在DM会话中运行:
- 在评论提交、评论触发事件的处理函数最开始,增加上下文场景判定分支:如果当前触发环境是DM私密对话,直接终止函数运行,不执行后续任何评论相关的处理
- 参考实现逻辑:
async function processComment(commentPayload) { // 前置DM拦截,直接隔离场景 if (commentPayload.channel.isDM) { return; } // 后续非DM场景的评论逻辑... }
2. 实现指定角色的评论权限校验
把角色权限校验放在DM拦截逻辑之后执行,减少无意义的资源消耗:
- 提前维护好可使用评论功能的指定角色白名单,存储在独立配置项中,方便后续调整
- 拿到当前提交评论的作者所持有的全部角色列表,和白名单做匹配校验:只有作者持有白名单内的任意一个角色时,才放行评论功能的正常生效;未匹配到对应角色时直接拦截评论操作
- 参考实现逻辑:
// 配置项:可使用评论功能的角色白名单 const ROLE_WHITELIST = [ 'comment_enabled_role_01', 'verified_user_role', 'core_contributor_role' ]; // 接在DM拦截逻辑之后的权限校验 const authorHeldRoles = commentPayload.author.roleList; const isAuthorized = authorHeldRoles.some(role => ROLE_WHITELIST.includes(role.roleId)); if (!isAuthorized) { // 无权限时拦截评论生效 return; } // 校验通过后执行评论的正常落库、展示等逻辑
落地注意事项
- 调整判定逻辑的顺序:先做DM场景拦截,再做角色权限校验,避免在DM会话中无意义地请求用户角色信息,增加接口开销
- 做场景判定时注意区分真正的DM会话和群组内的私密子频道,不要误把群组内私密频道的评论请求也拦截
- 角色匹配逻辑支持灵活扩展,比如可以根据需求调整为“必须持有白名单内所有角色才可使用评论功能”的规则,只需要把匹配判断的逻辑从
some改成every即可
内容的提问来源于stack exchange,提问作者Mehmet Deniz
相关产品推荐
相关产品推荐

