<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Junky's IT Notebook

    統(tǒng)計(jì)

    留言簿(8)

    積分與排名

    WebSphere Studio

    閱讀排行榜

    評(píng)論排行榜

    14.2 實(shí)施保護(hù)領(lǐng)域?qū)ο蟮闹匾襟E

    14.2  實(shí)施保護(hù)領(lǐng)域?qū)ο蟮闹匾襟E

    在熟悉Acegi中ACL子系統(tǒng)的各個(gè)術(shù)語(yǔ)及基本概念后,我們需要通過(guò)實(shí)際企業(yè)應(yīng)用驗(yàn)證它們,從而加深對(duì)它們的理解。

    14.2.1  RDBMS表的建立

    為了實(shí)施基于Acegi ACL領(lǐng)域?qū)ο笫跈?quán)支持的企業(yè)應(yīng)用,開(kāi)發(fā)者必須建立好同ACL相關(guān)的4張RDBMS表。它們的名字和含義如下。

    l  acl_class:用于存儲(chǔ)領(lǐng)域?qū)ο髮?duì)應(yīng)的全限定名,比如sample.contact.Contact。

    l  acl_sid:用于存儲(chǔ)ACL授權(quán)對(duì)象,或者是用戶名,或者是角色名。比如,marissa用戶、ROLE_USER角色。

    l  acl_object_identity:用于存儲(chǔ)領(lǐng)域?qū)ο髮?duì)應(yīng)的Acl信息。

    l  acl_entry:用于存儲(chǔ)Acl(acl_object_identity)對(duì)應(yīng)的AccessControlEntry信息。默認(rèn)時(shí),acl_object_identity同acl_entry構(gòu)成了主從表關(guān)系,并以1:N關(guān)系存在。

    圖14-8展示了這4張表間的具體關(guān)系,這是采用Hibernate Tools獲得的圖形化表示,此外,圖中還展示了Acegi contacts示例存儲(chǔ)領(lǐng)域?qū)ο蟮腸ontacts表、存儲(chǔ)用戶和角色信息的users和authorities表。值得開(kāi)發(fā)者注意的是,contacts、users、authorities表與ACL對(duì)應(yīng)的4張表并無(wú)直接聯(lián)系。接下來(lái),我們來(lái)一一研究這些表的設(shè)計(jì)和內(nèi)容。由于Acegi contacts示例采用了HSQLDB RDBMS,因此這些表對(duì)應(yīng)的SQL DDL語(yǔ)句不能夠直接用于其他生產(chǎn)數(shù)據(jù)庫(kù),比如Oracle 10g、SQL Server 2005。在領(lǐng)會(huì)Acegi ACL的思想后,開(kāi)發(fā)者能夠很輕松地給出特定數(shù)據(jù)庫(kù)版本的ACL表定義。

    圖14-8  contacts示例設(shè)計(jì)的RDBMS表

    其一,users表的定義如下:username列用于存儲(chǔ)用戶名,password列用于存儲(chǔ)密碼,enabled列用于存儲(chǔ)啟用標(biāo)志位。

    create table users(

          username varchar_ignorecase(50) not null primary key,

          password varchar_ignorecase(50) not null,

          enabled boolean not null

    );

    圖14-9給出了users表中已存儲(chǔ)的示例數(shù)據(jù)。這里的password列的內(nèi)容經(jīng)過(guò)了MD5加密處理。

    圖14-9  users表已存儲(chǔ)的示例數(shù)據(jù)

    其二,authorities表的定義如下:username列用于存儲(chǔ)用戶名,authority列用于存儲(chǔ)角色名。

    create table authorities(

          username varchar_ignorecase(50) not null,

          authority varchar_ignorecase(50) not null,

          constraint fk_authorities_users foreign key(username) references users(username)

    );

    create unique index ix_auth_username on authorities(username,authority);

    圖14-10給出了authorities表中已存儲(chǔ)的示例數(shù)據(jù),其中的username列數(shù)據(jù)引用到users表中username列的數(shù)據(jù)。默認(rèn)時(shí),users和authorities表處于1:N的關(guān)系。

    圖14-10  authorities表已存儲(chǔ)的示例數(shù)據(jù)

    其三,contacts表的定義如下:id列用于標(biāo)識(shí)領(lǐng)域?qū)ο螅琧ontact_name列存儲(chǔ)聯(lián)系人的姓名,而email列用于存儲(chǔ)聯(lián)系人的郵件地址。

    create table contacts(

          id bigint not null primary key,

          contact_name varchar_ignorecase(50) not null,

          email varchar_ignorecase(50) not null

    );

    圖14-11給出了contacts表中已存儲(chǔ)的示例數(shù)據(jù)。

    圖14-11  contacts表已存儲(chǔ)的示例數(shù)據(jù)

    在實(shí)際企業(yè)應(yīng)用中,存在大量的領(lǐng)域?qū)ο螅蚨鴷?huì)存在大量的RDBMS表來(lái)存儲(chǔ)它們。類似地,實(shí)際企業(yè)應(yīng)用存儲(chǔ)用戶、角色信息的RDBMS表也不一定是users、authorities表,相信仔細(xì)閱讀過(guò)本書(shū)相關(guān)章節(jié)的開(kāi)發(fā)者都知道如何自定義它們。好了,再來(lái)研究4張ACL表的SQL DDL語(yǔ)句及相應(yīng)的示例數(shù)據(jù)。

    其四,acl_class表的定義如下:id列用于標(biāo)識(shí)領(lǐng)域?qū)ο髮?duì)應(yīng)的全限定名,而class列用于存儲(chǔ)領(lǐng)域?qū)ο髮?duì)應(yīng)的全限定名。

    create table acl_class(

          id bigint generated by default as identity(start with 100) not null primary key,

          class varchar_ignorecase(100) not null,

          constraint unique_uk_2 unique(class)

    );

    圖14-12給出了acl_class表中已存儲(chǔ)的示例數(shù)據(jù)。由于Acegi contacts示例僅僅存在單個(gè)Contact領(lǐng)域?qū)ο箢愋停虼诉@一表僅僅存在單條記錄。

    圖14-12  acl_class表已存儲(chǔ)的示例數(shù)據(jù)

    其五,acl_sid表的定義如下:principal列用于給定sid列的類型,即同一記錄中存儲(chǔ)了用戶名還是角色名。相比之下,sid列存儲(chǔ)用戶名或者角色名。如果sid列存儲(chǔ)了用戶名,則principal列取值為true;如果sid列存儲(chǔ)了角色名,則principal列取值為false。

    create table acl_sid(

          id bigint generated by default as identity(start with 100) not null primary key,

          principal boolean not null,

          sid varchar_ignorecase(100) not null,

          constraint unique_uk_1 unique(sid,principal)

    );

    圖14-13給出了acl_sid表中已存儲(chǔ)的示例數(shù)據(jù)。由于sid列存儲(chǔ)的數(shù)據(jù)都是用戶名,因此principal列取值都為true。在某種程度上,acl_sid對(duì)應(yīng)于Sid對(duì)象。

    圖14-13  acl_sid表已存儲(chǔ)的示例數(shù)據(jù)

    其六,acl_object_identity表的定義如下:id列為主鍵。其中,object_id_class引用到acl_class中的id列取值,圖14-14中的object_id_class列取值都是100,即Contact領(lǐng)域?qū)ο箢愋汀n愃频兀琽bject_id_identity列的內(nèi)容起到綁定特定領(lǐng)域?qū)ο蟮淖饔谩1热纾赾ontacts示例應(yīng)用中,object_id_identity列的內(nèi)容同contacts表中id列的內(nèi)容保持一致。注意,開(kāi)發(fā)者也可以通過(guò)其他策略維護(hù)object_id_identity列同特定領(lǐng)域?qū)ο箝g的綁定關(guān)系。默認(rèn)時(shí),我們建議領(lǐng)域?qū)ο蠖寄軌蚝衖d屬性,因?yàn)镺bjectIdentityImpl可能會(huì)通過(guò)反射機(jī)制調(diào)用到領(lǐng)域?qū)ο蟮膅etId()方法,并將返回結(jié)果存儲(chǔ)到object_id_identity列。最后,parent_object列用于指定當(dāng)前ACL的父ACL,而own_sid列用于存儲(chǔ)當(dāng)前ACL的主人,entries_inheriting列用于指定當(dāng)前ACL是否繼承父ACL(含有的ACE集合)。可以看出,owner_sid列取值引用到acl_sid中id列取值。

    create table acl_object_identity(

          id bigint generated by default as identity(start with 100) not null primary key,

          object_id_class bigint not null,

          object_id_identity bigint not null,

          parent_object bigint,

          owner_sid bigint,

          entries_inheriting boolean not null,

          constraint unique_uk_3 unique(object_id_class,object_id_identity),

          constraint foreign_fk_1 foreign key(parent_object)references acl_object_identity(id),

          constraint foreign_fk_2 foreign key(object_id_class)references acl_class(id),

          constraint foreign_fk_3 foreign key(owner_sid)references acl_sid(id)

    );

    圖14-14給出了RDBMS acl_object_identity表中已存儲(chǔ)的示例數(shù)據(jù)。在某種程度上,acl_object_identity對(duì)應(yīng)于Acl對(duì)象。

    圖14-14  acl_object_identity表已存儲(chǔ)的示例數(shù)據(jù)

    其七,acl_entry表的定義如下:id列是主鍵。其中,acl_object_identity表指定當(dāng)前ACE所屬的ACL,即對(duì)應(yīng)到acl_object_identity表中的id列。類似地,sid列用于存儲(chǔ)當(dāng)前ACE所屬的授權(quán)對(duì)象,它對(duì)應(yīng)于acl_sid表中的id列;ace_order列對(duì)ACE集合進(jìn)行排序;mask列存儲(chǔ)ACE權(quán)限信息,具體情況請(qǐng)參考BasePermission和CumulativePermission類;granting列表明當(dāng)前的ACE權(quán)限是否已經(jīng)授給了同一記錄持有的sid列(用戶名或角色);audit_success和audit_failure列用于審計(jì)目的,供各種基于Acegi ACL的管理工具在審計(jì)ACL(ACE)時(shí)使用。開(kāi)發(fā)者可以借助于Acegi暴露的API開(kāi)發(fā)出相應(yīng)的審計(jì)(管理)工具。

    create table acl_entry(

          id bigint generated by default as identity(start with 100) not null primary key,

          acl_object_identity bigint not null,

          ace_order int not null,

          sid bigint not null,

          mask integer not null,

          granting boolean not null,

          audit_success boolean not null,

          audit_failure boolean not null,

          constraint unique_uk_4 unique(acl_object_identity,ace_order),

          constraint foreign_fk_4 foreign key(acl_object_identity) references acl_object_identity(id),

          constraint foreign_fk_5 foreign key(sid) references acl_sid(id)

    );

    圖14-15給出了RDBMS acl_entry表中已存儲(chǔ)的示例數(shù)據(jù)。在某種程度上,acl_entry對(duì)應(yīng)于AccessControlEntry對(duì)象。

    圖14-15  acl_entry表已存儲(chǔ)的示例數(shù)據(jù)

    posted on 2007-07-03 19:21 junky 閱讀(1020) 評(píng)論(0)  編輯  收藏 所屬分類: security

    主站蜘蛛池模板: xxxxx做受大片视频免费| 最近最新高清免费中文字幕 | 免费永久看黄在线观看app| 一级毛片免费播放男男| 亚洲黑人嫩小videos| 黄网址在线永久免费观看| 丝瓜app免费下载网址进入ios| 亚洲狠狠狠一区二区三区| 国产裸模视频免费区无码| 国产一级片免费看| 久久亚洲欧美国产精品| 亚洲视频在线播放| 国产成人免费片在线观看| 美女内射无套日韩免费播放| 久久久久亚洲精品无码网址色欲| 国产成人亚洲综合无码精品| 精品国产精品久久一区免费式| 免费高清国产视频| 免费VA在线观看无码| 亚洲成年人电影在线观看| 亚洲人成网站观看在线播放| 日韩免费一区二区三区在线播放| 精品国产呦系列在线观看免费| 亚洲熟女综合色一区二区三区| 亚洲成a人片在线观看中文动漫 | 久久久婷婷五月亚洲97号色| 亚洲AV无码之日韩精品| 91在线品视觉盛宴免费| 日本免费人成网ww555在线| 18禁亚洲深夜福利人口| 亚洲欧洲久久精品| 国产精品亚洲片在线| 国产片免费在线观看| 午夜国产精品免费观看| 久久免费观看国产99精品| a级毛片免费观看网站| 亚洲中文字幕无码久久2020 | 四虎影永久在线高清免费| 久久综合AV免费观看| 114级毛片免费观看| 九九精品成人免费国产片|