用户身份权益系统(或会员权益系统)几乎是各大成熟app的标配。用户身份权益体系通过赋予用户身份(会员和等级),为不同用户提供不同级别的产品权益,是用户活动运营和商业化的重要工具。同时,用户身份也是区分用户影响力、质量(如微博的大V)等关键能力的重要标志,无论是电商还是社交产品,都起着关键作用。本文将以闲鱼app的用户身份权限系统为例,从技术实现的角度介绍如何设计一个具有良好扩展性的用户身份权限系统。
问题与挑战[身份权益管理]
在常见的身份权限管理场景中,用户可以同时获得多个不同的身份,多个身份可能持有重叠的权益,相同的权益可能存在内容上的差异(如数量),权益重复时存在处理权益的合并策略。如何抽象设计身份和权限的概念是整个系统的核心问题。
[披露身份]
当一个用户获得一个身份,无论是大V标签还是会员级别,都希望在app上展示出来,传达自己独特的心意。不同的身份可能有相同的标签(例如闲鱼的域卖家和可以玩V标签的玩家),相同的身份可能有不同的个性化标签内容(例如某个域的玩家)。如何在app全链路统一管理用户的身份,也是身份权限系统需要解决的问题。
[身份赋予]
不同的产品有不同的身份赋予方式,比如付费购买、积分升级、认证、运营美白等。在赋予身份的过程中,丰富的升级路线(等级体系等。)将被添加,它们在同一产品中很常见,同时具有多种赋予身份的方式。如何支持多种身份赋予方式,如何支持不同身份的扩展,也是技术上需要解决的重要问题。
本文详细介绍了闲鱼身份权益系统中身份权益的定义、管理和身份披露。同时,以闲鱼的用户认证过程为例,介绍了身份管理和身份赋予两个过程如何解耦,在身份赋予过程中可以扩展身份。
技术实现概念梳理
身份是指用户在满足一定的访问条件后被授予的身份标签。在技术实现中,身份是与用户相关联的记录/系统标签。
权益是指用户在一些现有的业务中,因为拥有某种身份而获得的一些特权。我们用一个键-值对来表示一个权益,键表示权益,值表示权益的值,可以是数字、布尔值、带占位符的文本等。股权提供者根据股权的价值提供特定股权。
透明标签(Transparent label)是指根据某个身份的显式权益而获得的基于用户的可显示描述符,可以渲染在客户端和前台页面上,实现显式身份。标签的描述可以是:一段文字,一个图片url,一组可以被客户端识别的元素等等。客户端根据这个标签的内容进行渲染。
认证是指用户希望获得某个身份而发起的认证申请,认证后会获得一个身份。认证是技术实现中的认证记录,包括认证的状态和与该认证相关的信息(包括提交的表格、审核结果等。).
注意:认证是获取身份的一种方式。本文以认证过程为例,介绍如何实现一个身份赋予的过程。值得注意的是,在我们的设计中,身份的揭示被设计成一种兴趣。
系统拆分
相应地,我们将系统分为三个独立的模块:身份权限服务、用户标签服务和认证服务(以认证服务为代表的身份赋予模块)。三个系统的功能和边界定义如下:
[身份权限服务]
管理用户的身份和身份-权限关系。操作可以通过系统配置身份对应的权益。系统可以对用户的权益进行计算和合并,权益提供者可以通过身份权益服务查询用户的权益。
[用户标签服务]
根据用户权益、个性化数据等外部服务,将用户的透明标签按规则分配到全链路。全链路的每个场景都可以使用不同的规则查询当前场景的可渲染用户标签,标签系统可以差异化定制不同的规则,从而按需订阅和扩展不同的场景。
[认证服务]
管理用户的认证流程,用户通过认证服务发起申请,系统验证用户的权限和表单,将表单转发给运营审计,并处理审计结果。认证通过后,通过身份权限服务接口添加用户的身份。同样,所有的点、白名单和用户层级都可以通过这种方式访问。
基于上述设计,用户通过认证服务获取身份,权益提供者根据身份权益服务查询相应的权益提供特权,用户标签服务支持其中的透明权益,将用户的身份渲染在app端,从而实现身份显式,完全满足用户身份认证透明能力。下面介绍每个系统是如何实现的。
【身份权益服务】实现
【身份权益服务】基于身份权益配置和用户标签系统(集团中台用户标签服务)实现。我们将身份权限的配置写入身份权限配置表,编辑后通过配置中心发布到各个服务器的内存中。另一方面,用户认证过程和白名单等服务通过身份服务接口将身份写入UIC的标签系统。标签系统是集团实现的用户标签管理系统,可以基于缓存快速查询用户是否有标签,一个身份用一个标签表示(如果没有标签系统,也可以通过数据库+缓存实现)。当权益提供者查询用户权益时,我们从用户标签系统中快速读取用户的所有身份标签,根据内存中身份-权益的配置,通过一个身份-权益计算函数(输入身份标签和权益配置图式,输出权益),进行权益合并,去除优先级(不同的权益根据权益配置进行合并,如逻辑OR、最大值、字符连接等。),并返回计算结果(权益)。
【用户标签服务】实现
【用户标签服务】实现用户维度的标签展现。服务可以基于身份权限服务、用户个性化数据、外部服务等返回用户需要揭示的标签。标签的描述包括但不限于图片url、文本、复杂结构等。可以通过规则id定制服务。不同的规则id可以定制需要显示的标签组合。每个场景可以根据需要显示的标签订阅适当的规则id。如果原来的规则id不适用,可以定义新的规则ID来支持它。
【认证服务】实现
【认证服务】定义了一套标准的认证流程,统一管理认证状态。同时,通过扩展接口,不同认证流程的业务可以实现扩展接口,从而实现流程标准化,内容可扩展。认证服务的整个流程分为认证查询、表单提交和审核结果处理三个阶段。在认证过程中,系统维护四种不同的状态:未认证、正在审核、审核未通过、审核通过。不同的认证过程具有相同的状态流,并且由认证服务统一维护。在认证查询中,不同的认证过程有不同的访问条件;在表单提交过程中,不同的认证流程有不同的表单域和合法性要求;在审计结果中,不同的认证过程对审计结果有不同的处理方式。因此,认证过程提供了三个扩展接口。第一个扩展接口用于确定用户的访问条件和呈现表单。第二个扩展接口用于验证用户表单和生成用于审计的数据表单。第三个扩展接口用于处理审计结果。因此,在我们的认证服务中,我们只需要实现上述三个扩展接口,就可以完成一套新的认证流程访问。
本文以闲鱼身份权限系统的实现为例,介绍了身份权限系统的概念定义、模块分解和技术实现。同时,以闲鱼的身份认证过程为例,介绍了不同身份赋予通道的实现和接入,希望能为人人系统中的身份权限设计提供一些参考。