文档中有一句话“登录认证能满足大部分安全需求”。我试了代码,发现绝大部分安全需求不能满足,请大家指点。以下是基于使用Swift SDK,开发版没有在控制台开启角色管理(收费),但是已经开启或没开启签名,权限管理只在实时通信框架内。
我先定义一下“高级权限”:查询App里全部对话、修改任意对话的属性,查询任意对话的全部聊天记录,在任意对话里发消息,删除任何对话的成员,这里说的任意对话包括不是自己创建的对话。“开启签名”:开启对话的登陆签名,对话操作签名。
1_Conversation的ACL在任何情况下不起作用,也就是说,不管如何设置_Conversation表的ACL,任何用户都有“高级权限”,比如上述查询全部对话,随意修改别人对话属性,随意查询任何对话的全部聊天记录,删除任意对话成员的功能,以下简称“高级权限功能”。开启签名后,具有签名的用户都具有高级权限,即任意一个签名用户可以随意修改任意对话属性,查询全部对话,删除别人建立的对话里面的成员、在别人建立的对话里面发消息(不请自来)等高级权限功能。
2._Conversation记录创建对话后,用户无法删除,只能开发者在控制台删除对话,这一点非常好,一个用户退出对话,不影响对话里其他成员继续正常使用。
3.对话中的消息:聊天记录,虽然任何人都能查询(开通签名后,有签名的所有用户可以查询)全部对话的全部消息,但不能删除或修改别人发的消息,只能修改或撤回自己发的消息。这一点是不错的权限管理。
4.理论上聊天记录对所有使用者透明,开发者可以在后台,非开发者可以在客户端查询App里全部对话的全部聊天消息,不是自己创建的对话也能查消息。开启签名后,所有聊天记录,包括不是自己创建的对话的聊天记录,对所有签名用户透明。
5.不是自己创建的对话,用户可以通过主动加入对话的方式拥有高级权限,主动加入某一对话不受限制。开启签名后,有签名的用户可以主动加入任意对话从而拥有高级权限(所有签名用户主动加入任意对话不受限制)。
6._Conversation里的对话记录长期有效,但对话里的消息保存期是6个月。
7_Conversation里面的对话,创建者一列永远不变,用户发消息不会改变_Conversation里的updateAt日期,只有属性的更改才会更新updateAt日期
8.能查询到对话,就能查询到对话的全部聊天记录,不是对话成员可以通过主动加入对话的方式具有这一能力,因为主动加入对话是不受限制的,查询全部对话当然也更不受限制,签名后,所有签名用户可以查询全部对话,主动加入任意对话获取全部聊天记录。登录认证并不能满足大部分安全需求,只能把没有签名的用户挡住,有签名的用户可以查询全部对话列表(不受限制),主动加入任意对话(不受限制),查看全部对话的全部聊天记录、修改对话属性(也就不受限制了)
9.签名只能挡住没签名的,有签名用户的可以拥有高级权限,包括去别人建立的任意对话里发消息等等