一个最简单的用户系统,只须要有用户和身份验证两个模块就够了。如图:
这里提示一下:上层数据依赖下层数据。举个栗子,就是身份验证须要依赖用户数据。3d
若是须要进行权限管理的话,那么就加上资源和角色模块。同时,在身份认证以后须要按需进行鉴权。
资源和用户都是最底层的数据,角色须要关联用户和资源完成对用户的受权。了解RBAC模型的,应该很清楚这种关系。
blog
若是咱们须要有用户组辅助用户管理,或者系统中须要有组织机构,而且支持对职位进行受权操做的话。咱们能够再添加用户组和组织机构模块,这两个模块能够和用户创建多对多的关系。同时,角色就能够经过和用户组、组织机构和用户创建间接的关系,这样就能够简化受权操做。
资源
不少时候,咱们须要有租户的概念,使用租户来分开用户的业务数据。譬如钉钉就是一个多租户系统,每家企业在钉钉里面都是一个租户。
咱们能够在用户之上增长租户模块,让租户和用户、资源(应用)创建多对多的关系。同时,用户组、组织机构和角色就均可以按租户进行区分了。
权限
假设每一个租户都有「管理员」这个角色,那么1万个租户在系统里面就会有1万个名字叫管理员的角色,只不过每一个租户都只能看到本身的那个「管理员」角色罢了。若是A租户创建了一个「业务员」角色,那么B租户是没有这个角色的,他想要的话,必须本身去创建一个。im
在第4张图里面,用户组、组织机构和租户这几个模块都是可选的。模块之间不该该存在耦合关系,只存在数据依赖关系。你须要什么就实现什么,并不须要一开始就所有实现。数据