关于google drive的权限设计,一开始看官方文档,搞的云里雾里的!

可能是对google drive不了解的关系,再加上没有参与设计过类似的平台化系统,所以对于它的权限设计内容,总觉得很绕~

停下来花了点时间仔细捋了一遍,发现这个设计还是非常优雅的,至于通用性,我就持保留态度了!

首先,我们来列出整套权限系统设计到的元素有哪几个:

  • account(帐号)
    • user
    • user group
    • domain
    • anyone
  • resource(资源)
    • file
    • folder
  • permission(权限设置)
    • role
    • type

咱们简单的就这么先罗列出来。

首先我们先看一下三个主要的元素的关系:

resource  ------>  permission  ------> account [ ------>  resource]
          1     n              1     n           n     n

解释:

  • 一个资源对应多个权限设置
  • 一个资源的metadata中还会包含多个特定帐号(owners, sharingUser, lastModifyingUser)
  • 一个权限设置绑定到多个帐号(根据type来确定和帐号的绑定类型,根据domain和emailAddress来确定具体哪个或哪些帐号)
  • 一个权限设置会预先设定好几个拥有不同操作范围的角色(role),具体关系可以看官方文档
  • 最终,帐号就会和资源关联上,就是这么绕!

其实只需要注意到,角色和权限的对应关系是固定的,而帐号和角色的关系是靠人为设定的,这两个环节只要一旦确定以后,自然就完成了帐号到资源的操作权限绑定。

现在应该已经解释的很清楚了吧?上面的关系图中最后的account与resource的关系其实是根据前面的关系推出来的,而不是直接可以获取到的(除了在resource的metadata中的那几个特定帐号字段,个人猜测之所有会有这几个metadata,是为了性能)。

不能确定这么设计是好还是坏,但整体来看,其实并不算复杂。