上文书 《用VB演示对Auth的理解及代码实现一(引言篇)》 说到大观园权限认证的问题,要是能用上 Auth 该多好。

那么具体如何下手...咳咳...那个入手呢?

咱们先研究一下 Auth 的大概原理。

上图:


图画得还凑合吧,能看明白吗?

一句话,勇士只有拿到钥匙(扮演角色),才能用钥匙打开宝箱(权限)。

好,咱们来详细分析分析看啊。


首先,三张表,用户、角色和权限。

-- 用户表
CREATE TABLE "user"(
  [id] INTEGER PRIMARY KEY AUTOINCREMENT, 
  [name] VARCHAR NOT NULL, 
  [password] VARCHAR NOT NULL, 
  [status] TINYINT NOT NULL DEFAULT 1);
 
-- 角色表
CREATE TABLE [role](
  [id] INTEGER PRIMARY KEY AUTOINCREMENT, 
  [name] VARCHAR NOT NULL);
 
-- 权限表
CREATE TABLE [permission](
  [id] INTEGER PRIMARY KEY AUTOINCREMENT, 
  [name] VARCHAR NOT NULL);
 


其次,两张表,用户和角色的中间表,以及角色和权限的中间表。

两张中间关系表把三张实物表连接了起来。

-- 用户和角色关系表
CREATE TABLE [user_role](
  [uid] INTEGER NOT NULL, 
  [rid] INTEGER NOT NULL);
 
-- 角色和权限关系表
CREATE TABLE [role_permission](
  [rid] INTEGER NOT NULL, 
  [pid] INTEGER NOT NULL);
 

拢共五张表,清晰不?


再次,勇士通过扮演某个角色,就能拥有成为某个角色拥有的钥匙。

有点绕是吧,简单地说,就是什么样的角色就有什么样的钥匙,什么样的钥匙就能开什么样的宝箱。


最后,勇士拿着钥匙尝试打开宝箱,打得开就是有权限,打不开就没有权限。

勇士可以扮演很多角色,那么就会拥有很多把钥匙。

他拿着一大把钥匙去挨个打开各种各样的宝箱,但不管用了哪一把打开了宝箱,都说明他有打开这个宝箱的权限,否则就没有权限。


说了这么多,那么怎么套上大观园的实际需求呢?

回顾一下需求:

居所和主子、丫环们的关系:

序号 房子 主人 丫鬟
1 怡红院 宝玉 袭人、晴雯、麝月、秋纹
2 潇湘馆 黛玉 雪雁、紫鹃
3 蘅芜苑 宝钗 莺儿

权限说明:

  1. 各房子的主人可自由出入每个房子。
  2. 自家丫鬟只可出入自家房子。
  3. 袭人、晴雯可以出入潇湘馆。
  4. 莺儿可以出入怡红院。


勇士和钥匙整明白后,我们就可以这么干:

1、创建前面说的三张实物数据表,映射关系可以是这个样子:

人物 ⇒ 用户表

通行证 ⇒ 角色表

房子 ⇒ 权限表


2、角色表分类

人物和房子按一一对应关系,建立用户表和权限表即可。

但对于交叉关系来说,需要加工一下角色表,把它分分类。

大致可以按房子能否进入分为三个分类,比如:

怡红院通行证、潇湘馆通行证、和蘅芜苑通行证。

那么,宝玉、黛玉和宝钗自然都属于这三个分类,可以随意出入三座房子。

所有的丫环只能归属自己主人居住房子命名的分类。

而特殊情况下,有几个大丫环有些特权,可以出入其他主人的房子,那么她们就同时属于其他的分类。


举几个栗子:

  • 宝玉是主人,他哪儿都可以去,那么他就属于所有角色分类,大观园小区的所有通行证他都有。

  • 秋纹是丫环,只可以去主人房子,所以她只能属于自己主人房子一个角色分类-怡红院通行证。

  • 而袭人呢,她的主人是宝玉,自然她属于怡红院分类。

    另外,她有出入潇湘馆的特权,所以她也同时属于潇湘馆分类,她有两张通行证。

大概像这个样子:


好了,人物、分类、房子都有了,它们之间的关系也有了,接下来就是用代码如何处理它们了。

在下一篇文章中,我会用VB结合SQLite数据库演示如何实际操作处理它们以及它们之间的关系。

如果你没有看过我之前写的两篇文章:

《VB+Sqlite组合,真香!(一)》

《VB+Sqlite组合,真香!(二)》

赶紧先看看热热身,下一篇会用到哦!


以上内容对于刚接触概念的小伙伴脑子容易乱,如果你还没整明白,建议回头再看一看。

敬请期待下一篇 《用VB演示对Auth的理解及代码实现三(实操篇)》


暂无评论

登录并提交评论

© 2020-present 网管小贾 | 微信公众号 @网管小贾
许可协议:CC-BY-NC 4.0 | 转载文章请注明作者出处及相关链接