<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 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理
    ??????首先上文權限設計拙見(1)中只是想記錄下自己權限設計上的一點看法,以及將自己日常最常用的權限解決方案記錄下來以供日后回顧,沒想到有朋友關注此類的設計,那就只能先把代碼拿出來獻丑了,拋磚引玉,大家共同探討學習
    ??????接著上文來說,上文所討論的權限設計是一條思路,但既然是web應用,少不了數據庫的支持,本文我們來討論一下數據庫的設計。(以下想法及思路僅僅代表本人拙見)
    ????? 說到權限的數據庫設計,必先理清權限中幾種實體及其關系,此部分想必有過設計權限經驗的同仁都知道怎么設計了,網上擺渡一下也是一褲衩子一褲衩子的,我們就在最平凡直觀的數據庫關系的基礎上來建立權限。下面是我的幾個表(所有的表都帶有一個pk_id,作為表的自動生成的唯一主鍵):
    用戶表(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);
    用戶表就不多說了,都是一些常用字段,年齡、電話、職位等,建議大家建立一個通用一些,字段多一些的一個用戶表,便于以后擴展,以后如果有特殊需求,不用擴這個基本表,可以通過主外鍵關系來新建一個表,用于擴充字段
    角色表(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);
    角色表中需要說明的就一個parent_role_id父角色id,此字段用來擴展角色的繼承關系。
    資源表(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
    這個表需要說明的就比較多了,首先該表用來記錄資源與資源權限,我這邊所謂的資源就是實體,就是數據庫表,角色需要對應到資源,有些角色對該資源有權限,有些角色則對該資源無權限,角色可對此資源操作的權限也不同。說白了,就是不同的角色對不同的數據庫表的操作權限不同。因此我們這里的資源就是數據庫表。
    module_name:資源名;module_code:資源代碼(存放數據庫表名);
    privilege_name:權限名;privilege_code:權限代碼(代表權限的code,也就是我們上文所說的權值)
    例如角色a對數據庫表T_UserInfo有添加與刪除的權限則該表應該按照如下配置:
    module_name:人員信息;
    module_code:T_UserInfo
    privilege_name:添加與刪除
    privilege_code:6
    這里我們假設的是2的0次方為添加權限,2的1次方為添加權限,2的2次方為刪除權限,2的3次方為更新權限,則擁有添加與刪除權限就應該為2的1次方+2的2次方=6,其實2的幾次方代表什么含義我們可以另外開個數據庫表來配置(或者xml文件)此處我們忽略這些步驟。當然如果你的權限較多,譬如你還希望a這個角色對人員信息表有上傳得權限,我們可以將將上傳權限定義為2的4次方,16,16的16進制數為10,記錄在數據庫里的形式應該為0x10如果a角色擁有添加、刪除、更新、上傳權限,則a的權值應該為2的1次方+2的2次方+2的3次方+2的4次方=30,用16進制來表示就應該為0x1E,記錄16進制數據,你不用擔心位數不夠。
    剩余的就是幾張關系表了:
    人員角色關系表(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
    角色資源關系表(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
    當然如果你不怕麻煩,可以添加進去組(group)、系統(system)、組織(organization),建立起一套屬于你自己的完整的權限解決方案,作為系統無關的模塊去套用到每個你所架構的應用中去,那是一件極爽的事情。
    連續劇開始了,暫時擱筆~~

    評論

    # re: web開發中的權限設計拙見一二(2) ----數據庫設計  回復  更多評論   

    2007-01-03 05:13 by lang
    早上起來就看了半天這個,期待著進一步的代碼和講解!

    # re: web開發中的權限設計拙見一二(2) ----數據庫設計  回復  更多評論   

    2007-01-03 13:11 by 江上一葉舟
    呵呵,我剛起床,下面就發布代碼,如果不結合代碼,看這樣的數據庫設計或許會很疑惑難懂

    # re: web開發中的權限設計拙見一二(2) ----數據庫設計  回復  更多評論   

    2007-01-03 16:35 by coder
    不是我打擊你,這個設計太簡陋了

    # re: web開發中的權限設計拙見一二(2) ----數據庫設計  回復  更多評論   

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

    # re: web開發中的權限設計拙見一二(2) ----數據庫設計  回復  更多評論   

    2007-04-20 17:36 by netbrand
    疑問:
    1.如果再有一個權限,privilege_code CHAR,還能存儲嗎??
    2.如果一個用戶有多個角色,那么如何進行這些權限如何合并??

    # re: web開發中的權限設計拙見一二(2) ----數據庫設計  回復  更多評論   

    2008-11-24 11:43 by oven
    初學權限設計,受益匪淺。

    # JAVA開發中的權限設計  回復  更多評論   

    2009-03-26 23:44 by interdrp
    疑問:
    1.如果再有一個權限,privilege_code CHAR,還能存儲嗎??
    看你字段大小

    2.如果一個用戶有多個角色,那么如何進行這些權限如何合并??
    多個角色我用的是策略組來實現的

    權限->策略->用戶 實例 www.interdrp.com 下載分銷系統客戶端,用系統提示的默認的帳套及用戶名進入系統即可。
    有什么好的想法也可以在 http://www.cnblogs.com/interdrp/ 提出,謝謝

    # re: web開發中的權限設計拙見一二(2) ----數據庫設計  回復  更多評論   

    2009-08-19 15:12 by kystream
    很是基礎啊。。呵呵
    主站蜘蛛池模板: 日韩免费视频一区二区| 麻豆安全免费网址入口| 外国成人网在线观看免费视频| 久久久久亚洲精品中文字幕| 亚洲综合色婷婷在线观看| 182tv免费视视频线路一二三| 久久亚洲AV无码精品色午夜麻| 黄 色一级 成 人网站免费| 久久精品国产精品亚洲艾草网美妙| 色噜噜噜噜亚洲第一| 精品久久洲久久久久护士免费| 亚洲高清有码中文字| 精品国产免费观看久久久| 特级av毛片免费观看| 亚洲国产成人爱av在线播放| jizz在线免费播放| 国产综合亚洲专区在线| 亚洲成在人线aⅴ免费毛片| 久久精品亚洲中文字幕无码麻豆| 久久国产精品免费专区| 亚洲激情视频网站| 毛片免费视频观看| 日韩国产精品亚洲а∨天堂免| 亚洲av再在线观看| 中国国语毛片免费观看视频| 亚洲男人天堂2017| 久久国产免费福利永久| 亚洲一区视频在线播放| 青青操在线免费观看| 亚洲一本综合久久| 成全高清视频免费观看| 午夜成人无码福利免费视频| 亚洲av午夜福利精品一区 | 国产亚洲视频在线观看| 久久精品国产精品亚洲艾草网美妙 | 香蕉免费看一区二区三区| 亚洲欧洲日产国码av系列天堂| 中文无码日韩欧免费视频| 亚洲午夜未满十八勿入| 午夜毛片不卡免费观看视频| jizz18免费视频|