上文书 《用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、角色表分类
人物和房子按一一对应关系,建立用户表和权限表即可。
但对于交叉关系来说,需要加工一下角色表,把它分分类。
大致可以按房子能否进入分为三个分类,比如:
怡红院通行证、潇湘馆通行证、和蘅芜苑通行证。
那么,宝玉、黛玉和宝钗自然都属于这三个分类,可以随意出入三座房子。
所有的丫环只能归属自己主人居住房子命名的分类。
而特殊情况下,有几个大丫环有些特权,可以出入其他主人的房子,那么她们就同时属于其他的分类。
举几个栗子:
宝玉是主人,他哪儿都可以去,那么他就属于所有角色分类,大观园小区的所有通行证他都有。
秋纹是丫环,只可以去主人房子,所以她只能属于自己主人房子一个角色分类-怡红院通行证。
而袭人呢,她的主人是宝玉,自然她属于怡红院分类。
另外,她有出入潇湘馆的特权,所以她也同时属于潇湘馆分类,她有两张通行证。
大概像这个样子:
好了,人物、分类、房子都有了,它们之间的关系也有了,接下来就是用代码如何处理它们了。
在下一篇文章中,我会用VB结合SQLite数据库演示如何实际操作处理它们以及它们之间的关系。
如果你没有看过我之前写的两篇文章:
赶紧先看看热热身,下一篇会用到哦!
以上内容对于刚接触概念的小伙伴脑子容易乱,如果你还没整明白,建议回头再看一看。
敬请期待下一篇 《用VB演示对Auth的理解及代码实现三(实操篇)》!