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

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

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

    1+1=2,0+0=0

    日月累積
    posts - 7, comments - 50, trackbacks - 0, articles - 0
      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理
    ??????首先上文權(quán)限設(shè)計(jì)拙見(jiàn)(1)中只是想記錄下自己權(quán)限設(shè)計(jì)上的一點(diǎn)看法,以及將自己日常最常用的權(quán)限解決方案記錄下來(lái)以供日后回顧,沒(méi)想到有朋友關(guān)注此類的設(shè)計(jì),那就只能先把代碼拿出來(lái)獻(xiàn)丑了,拋磚引玉,大家共同探討學(xué)習(xí)
    ??????接著上文來(lái)說(shuō),上文所討論的權(quán)限設(shè)計(jì)是一條思路,但既然是web應(yīng)用,少不了數(shù)據(jù)庫(kù)的支持,本文我們來(lái)討論一下數(shù)據(jù)庫(kù)的設(shè)計(jì)。(以下想法及思路僅僅代表本人拙見(jiàn))
    ????? 說(shuō)到權(quán)限的數(shù)據(jù)庫(kù)設(shè)計(jì),必先理清權(quán)限中幾種實(shí)體及其關(guān)系,此部分想必有過(guò)設(shè)計(jì)權(quán)限經(jīng)驗(yàn)的同仁都知道怎么設(shè)計(jì)了,網(wǎng)上擺渡一下也是一褲衩子一褲衩子的,我們就在最平凡直觀的數(shù)據(jù)庫(kù)關(guān)系的基礎(chǔ)上來(lái)建立權(quán)限。下面是我的幾個(gè)表(所有的表都帶有一個(gè)pk_id,作為表的自動(dòng)生成的唯一主鍵):
    用戶表(T_UserInfo):
    ?1/*==============================================================*/
    ?2/*?Table:?T_UserInfo????????????????????????????????????????????*/
    ?3/*==============================================================*/
    ?4create?table?T_UserInfo?
    ?5(
    ?6????pk_id????????????????NUMBER?????????????????????????not?null,
    ?7????name?????????????????VARCHAR2(20),
    ?8????sex??????????????????BOOLEAN,
    ?9????age??????????????????int,
    10????emp_num??????????????NUMBER,
    11????polity???????????????int,
    12????unit?????????????????VARCHAR2(50),
    13????department???????????VARCHAR2(20),
    14????specialty????????????int,
    15????position?????????????VARCHAR2(10),
    16????offtel???????????????VARCHAR2(20),
    17????famtel???????????????VARCHAR2(20),
    18????post_state???????????VARCHAR2(10),
    19????remark???????????????VARCHAR2(100),
    20????constraint?PK_T_USERINFO?primary?key?(pk_id)
    21);
    用戶表就不多說(shuō)了,都是一些常用字段,年齡、電話、職位等,建議大家建立一個(gè)通用一些,字段多一些的一個(gè)用戶表,便于以后擴(kuò)展,以后如果有特殊需求,不用擴(kuò)這個(gè)基本表,可以通過(guò)主外鍵關(guān)系來(lái)新建一個(gè)表,用于擴(kuò)充字段
    角色表(T_RoleInfo):
    ?1/*==============================================================*/
    ?2/*?Table:?T_RoleInfo????????????????????????????????????????????*/
    ?3/*==============================================================*/
    ?4create?table?T_RoleInfo?
    ?5(
    ?6????pk_id????????????????number?????????????????????????not?null,
    ?7????role_name????????????VARCHAR2(20),
    ?8????role_desc????????????VARCHAR2(100),
    ?9????parent_role_id???????NUMBER,
    10????constraint?PK_T_ROLEINFO?primary?key?(pk_id)
    11);
    角色表中需要說(shuō)明的就一個(gè)parent_role_id父角色id,此字段用來(lái)擴(kuò)展角色的繼承關(guān)系。
    資源表(T_ResourceInfo):
    ?1/*==============================================================*/
    ?2/*?Table:?T_ResourceInfo????????????????????????????????????????*/
    ?3/*==============================================================*/
    ?4create?table?T_ResourceInfo?
    ?5(
    ?6????pk_id????????????????NUMBER?????????????????????????not?null,
    ?7????module_name??????????VARCHAR2(20),
    ?8????module_code??????????VARCHAR2(10),
    ?9????module_desc??????????VARCHAR2(100),
    10????privilege_name???????VARCHAR2(10),
    11????privilege_code???????CHAR,
    12????privilege_desc???????VARCHAR2(100),
    13????constraint?PK_T_RESOURCEINFO?primary?key?(pk_id)
    14);
    15
    這個(gè)表需要說(shuō)明的就比較多了,首先該表用來(lái)記錄資源與資源權(quán)限,我這邊所謂的資源就是實(shí)體,就是數(shù)據(jù)庫(kù)表,角色需要對(duì)應(yīng)到資源,有些角色對(duì)該資源有權(quán)限,有些角色則對(duì)該資源無(wú)權(quán)限,角色可對(duì)此資源操作的權(quán)限也不同。說(shuō)白了,就是不同的角色對(duì)不同的數(shù)據(jù)庫(kù)表的操作權(quán)限不同。因此我們這里的資源就是數(shù)據(jù)庫(kù)表。
    module_name:資源名;module_code:資源代碼(存放數(shù)據(jù)庫(kù)表名);
    privilege_name:權(quán)限名;privilege_code:權(quán)限代碼(代表權(quán)限的code,也就是我們上文所說(shuō)的權(quán)值)
    例如角色a對(duì)數(shù)據(jù)庫(kù)表T_UserInfo有添加與刪除的權(quán)限則該表應(yīng)該按照如下配置:
    module_name:人員信息;
    module_code:T_UserInfo
    privilege_name:添加與刪除
    privilege_code:6
    這里我們假設(shè)的是2的0次方為添加權(quán)限,2的1次方為添加權(quán)限,2的2次方為刪除權(quán)限,2的3次方為更新權(quán)限,則擁有添加與刪除權(quán)限就應(yīng)該為2的1次方+2的2次方=6,其實(shí)2的幾次方代表什么含義我們可以另外開(kāi)個(gè)數(shù)據(jù)庫(kù)表來(lái)配置(或者xml文件)此處我們忽略這些步驟。當(dāng)然如果你的權(quán)限較多,譬如你還希望a這個(gè)角色對(duì)人員信息表有上傳得權(quán)限,我們可以將將上傳權(quán)限定義為2的4次方,16,16的16進(jìn)制數(shù)為10,記錄在數(shù)據(jù)庫(kù)里的形式應(yīng)該為0x10如果a角色擁有添加、刪除、更新、上傳權(quán)限,則a的權(quán)值應(yīng)該為2的1次方+2的2次方+2的3次方+2的4次方=30,用16進(jìn)制來(lái)表示就應(yīng)該為0x1E,記錄16進(jìn)制數(shù)據(jù),你不用擔(dān)心位數(shù)不夠。
    剩余的就是幾張關(guān)系表了:
    人員角色關(guān)系表(T_R_User_Role):
    ?1/*==============================================================*/
    ?2/*?Table:?T_R_user_role?????????????????????????????????????????*/
    ?3/*==============================================================*/
    ?4create?table?T_R_user_role?
    ?5(
    ?6????pk_id????????????????NUMBER?????????????????????????not?null,
    ?7????user_id??????????????NUMBER,
    ?8????role_id??????????????NUMBER,
    ?9????constraint?PK_T_R_USER_ROLE?primary?key?(pk_id)
    10);
    11
    角色資源關(guān)系表(T_R_Role_Resource)
    ?1/*==============================================================*/
    ?2/*?Table:?T_R_role_resource?????????????????????????????????????*/
    ?3/*==============================================================*/
    ?4create?table?T_R_role_resource?
    ?5(
    ?6????pk_id????????????????NUMBER?????????????????????????not?null,
    ?7????role_id??????????????NUMBER,
    ?8????res_id???????????????NUMBER,
    ?9????constraint?PK_T_R_ROLE_RESOURCE?primary?key?(pk_id)
    10);
    11
    當(dāng)然如果你不怕麻煩,可以添加進(jìn)去組(group)、系統(tǒng)(system)、組織(organization),建立起一套屬于你自己的完整的權(quán)限解決方案,作為系統(tǒng)無(wú)關(guān)的模塊去套用到每個(gè)你所架構(gòu)的應(yīng)用中去,那是一件極爽的事情。
    連續(xù)劇開(kāi)始了,暫時(shí)擱筆~~

    評(píng)論

    # re: web開(kāi)發(fā)中的權(quán)限設(shè)計(jì)拙見(jiàn)一二(2) ----數(shù)據(jù)庫(kù)設(shè)計(jì)  回復(fù)  更多評(píng)論   

    2007-01-03 05:13 by lang
    早上起來(lái)就看了半天這個(gè),期待著進(jìn)一步的代碼和講解!

    # re: web開(kāi)發(fā)中的權(quán)限設(shè)計(jì)拙見(jiàn)一二(2) ----數(shù)據(jù)庫(kù)設(shè)計(jì)  回復(fù)  更多評(píng)論   

    2007-01-03 13:11 by 江上一葉舟
    呵呵,我剛起床,下面就發(fā)布代碼,如果不結(jié)合代碼,看這樣的數(shù)據(jù)庫(kù)設(shè)計(jì)或許會(huì)很疑惑難懂

    # re: web開(kāi)發(fā)中的權(quán)限設(shè)計(jì)拙見(jiàn)一二(2) ----數(shù)據(jù)庫(kù)設(shè)計(jì)  回復(fù)  更多評(píng)論   

    2007-01-03 16:35 by coder
    不是我打擊你,這個(gè)設(shè)計(jì)太簡(jiǎn)陋了

    # re: web開(kāi)發(fā)中的權(quán)限設(shè)計(jì)拙見(jiàn)一二(2) ----數(shù)據(jù)庫(kù)設(shè)計(jì)  回復(fù)  更多評(píng)論   

    2007-01-03 16:59 by 江上一葉舟
    @coder
    在上文中我提及到:“可以添加進(jìn)去組(group)、系統(tǒng)(system)、組織(organization),建立起一套屬于你自己的完整的權(quán)限解決方案,作為系統(tǒng)無(wú)關(guān)的模塊去套用到每個(gè)你所架構(gòu)的應(yīng)用中去”
    原理大同小異,我只是將其中的我覺(jué)得可以拿出來(lái)講的部分進(jìn)行抽絲剝繭,起個(gè)拋磚引玉的作用,早先我同事設(shè)計(jì)過(guò)一套極其復(fù)雜的權(quán)限數(shù)據(jù)庫(kù),其中涉及到安全密鑰、指紋識(shí)別、防火墻設(shè)定等等,但無(wú)論多復(fù)雜,都無(wú)法逃離角色-資源的關(guān)系,所以我僅僅抽出其中部分來(lái)敘述,如若還需擴(kuò)展,也很方便

    # re: web開(kāi)發(fā)中的權(quán)限設(shè)計(jì)拙見(jiàn)一二(2) ----數(shù)據(jù)庫(kù)設(shè)計(jì)  回復(fù)  更多評(píng)論   

    2007-04-20 17:36 by netbrand
    疑問(wèn):
    1.如果再有一個(gè)權(quán)限,privilege_code CHAR,還能存儲(chǔ)嗎??
    2.如果一個(gè)用戶有多個(gè)角色,那么如何進(jìn)行這些權(quán)限如何合并??

    # re: web開(kāi)發(fā)中的權(quán)限設(shè)計(jì)拙見(jiàn)一二(2) ----數(shù)據(jù)庫(kù)設(shè)計(jì)  回復(fù)  更多評(píng)論   

    2008-11-24 11:43 by oven
    初學(xué)權(quán)限設(shè)計(jì),受益匪淺。

    # JAVA開(kāi)發(fā)中的權(quán)限設(shè)計(jì)  回復(fù)  更多評(píng)論   

    2009-03-26 23:44 by interdrp
    疑問(wèn):
    1.如果再有一個(gè)權(quán)限,privilege_code CHAR,還能存儲(chǔ)嗎??
    看你字段大小

    2.如果一個(gè)用戶有多個(gè)角色,那么如何進(jìn)行這些權(quán)限如何合并??
    多個(gè)角色我用的是策略組來(lái)實(shí)現(xiàn)的

    權(quán)限->策略->用戶 實(shí)例 www.interdrp.com 下載分銷(xiāo)系統(tǒng)客戶端,用系統(tǒng)提示的默認(rèn)的帳套及用戶名進(jìn)入系統(tǒng)即可。
    有什么好的想法也可以在 http://www.cnblogs.com/interdrp/ 提出,謝謝

    # re: web開(kāi)發(fā)中的權(quán)限設(shè)計(jì)拙見(jiàn)一二(2) ----數(shù)據(jù)庫(kù)設(shè)計(jì)  回復(fù)  更多評(píng)論   

    2009-08-19 15:12 by kystream
    很是基礎(chǔ)啊。。呵呵
    主站蜘蛛池模板: 久久免费国产视频| 国产婷婷成人久久Av免费高清| 日韩色日韩视频亚洲网站| 国产精品亚洲专区在线播放| 一区二区三区精品高清视频免费在线播放 | 亚洲日本视频在线观看| 2020久久精品亚洲热综合一本| 亚洲精品乱码久久久久久V| 日韩在线视频播放免费视频完整版| 精品97国产免费人成视频 | 国产免费拔擦拔擦8X高清在线人| 午夜精品一区二区三区免费视频| 91麻豆最新在线人成免费观看| 精品国产精品久久一区免费式| 亚洲美女在线国产| 青青草原精品国产亚洲av| 77777午夜亚洲| 黄色网页在线免费观看| 久久久久亚洲精品中文字幕| 亚洲精品福利视频| 亚洲精品无码久久久久秋霞| yy一级毛片免费视频| 91精品免费久久久久久久久| 国产精品久久久久影院免费| 久久亚洲精品中文字幕无码| 亚洲一区二区三区国产精华液| 精品国产污污免费网站入口| 久久受www免费人成_看片中文| 亚洲一级特黄大片无码毛片| 亚洲欧洲日产韩国在线| 欧洲精品码一区二区三区免费看| 久久美女网站免费| 国产精品免费视频网站| 无码久久精品国产亚洲Av影片| 亚洲精品无码久久久久APP| 国产午夜无码精品免费看| 大香人蕉免费视频75| 亚洲精品色午夜无码专区日韩| 亚洲三级高清免费| 久久久免费的精品| 免费a级毛片大学生免费观看 |