认真思索一下按用户、按操作授权的可行性

今天一个朋友 @maiyude 在我 10个月以前的老帖子《STEEMIT高级操作之:如何多人共同维护一个公共STEEMIT账户(ID)》 下回复了以下内容:

好厉害的操作。不知道能不能只允许别人操作内部市场挂单,而不能转账呢?如果可以这样的话,基金托管经理也可以诞生了。

授权功能

说起来这个老帖还是 @laodr 公用账户开始启用不久之后发的,为了方便当时的茶馆茶东共同维护这个公共账户,我特意研究一下相关内容,在实现了对应的需求后,我将学习心得总结成上述帖子。(注:现在老道茶馆茶东已经不包含 @oflyhigh 以及 @deanliu 了😀)。

扯远了,看到这个朋友的问题之后,我第一个反应就是不可行,因为STEEM授权体系就4级,Owner、Active、Posting以及Memo,内部市场挂单以及转账都需要的是Active权限,在这之下,STEEM是没有细分的,也就是说按照我文中提到的方法,如果你给了一个用户Active权限,那么他即能挂单又能转账。

但是是否可以进一步细分操作和权限呢?比如我们添加了A用户以及B用户的Active权限,A用户只可以转账,B用户只可以挂单?或者我们添加了C用户和D用户的Posting权限,能否实现C用户只能点赞,D用户只能发帖呢?

我们A、B用户分别实现转账以及挂单功能为例,看看有没有什么办法可以实现。这个问题可以从两方面来看,一方面是授权,一方面是区分操作类型。如果我们用文首文中提及的办法,亦即完全授权,那么将无法限制A、B的操作类型,所以必须引用授权的权重以及阈值的概念。

简单来讲就是给每个用户赋予一定的操作权重,然后必须总权重超过阈值才可以进行对应操作。

用户权重
U_M20
U_A1
U_B1

假设我们Active权限设置了上述用户,并且设置阈值(threshold)为21,那么上述三个用户单独签名将无法进行任何操作,应该提示类似Threshold not satisfied的错误。

多重签名(Multisignature)

但是如果将U_M和U_A 或者 U_M和U_B组合起来,并对交易(transaction)进行多重签名(Multisignature),那么就会满足阈值,就可以进行操作了。也就是说,我们可以通过U_M来允许或者禁止U_A或者U_B进行操作

到这步思路就渐渐明朗了,既然我们可以通过U_M来允许或者禁止U_A或者U_B进行操作,那么我们是否可以在U_M这里判断用户的操作类型,来进行控制(允许或者禁止)呢?答案是肯定的,因为交易(transaction)中包含有操作(operations)信息,包括操作类型。

但是用一个U_M用户进行控制,我们显然不能再找个人充当U_M,我们自己也不能充当U_M,否则U_A、U_B进行操作时总喊我进行签名,岂不是累死?那么答案就是编程实现喽。U_A或者U_B的操作由他们签名后提交给网络程序,程序判断用户和操作类型后,对符合条件的由U_M进行签名,并广播出去。

对Posting权限的授权同样如此,其实我们可以更进一步,比如限制U_A只能转账给X1、X2、X3用户,限制U_C只能给X1、X2、X3用户的帖子点赞等等,也就是说可以通过U_M实现个超级权限控制中心

结论

通过授权时指定权重以及阈值,并通过Master用户以及对应程序来进行判断,对符合条件的用户的操作进行多重签名,我们可以实现对授权的精确控制。

本文仅仅为思路探索,并不确保一定可行,更不确保是最优思路,仅供参考。

参考链接

H2
H3
H4
3 columns
2 columns
1 column
11 Comments