delphine 說:
首先需要說明的是,整個OA系統控制只能到頁面,和按鈕(也就是說只能到頁面這一級,我還想能夠控制到業務級以及資料級)OA系統擁有一些欄目,分為主欄目,二級欄目,三級欄目。比如電子公文是一級,發文管理是二級我的我的發文的三級,實際的操作介面關聯的是三級欄目。現在開始說許可權,許可權劃分首先是按部門,部門下新增人員,添加完人員後進行許可權的劃分,劃分操作實際上就是給他訪問三級欄目對應的頁面。劃分許可權首先要給部門添加角色,在OA系統裡叫職位,比如主任,科員等,在添加完角色後需要給每個角色劃分許可權,這也是唯一一個劃分許可權的地方,然後將人員添加到角色中去。比如張三,是辦公室打字員,那麼我們在操作的時候先加入辦公室,然後在辦公室裡加入角色打字員,再為打字員分配打字員應該能夠看到的三級欄目,最後把張三放在打字員這個角色裡
冰雲@不在狀態 說:
暈 怎麼又一遍
delphine 說:
我怕你關掉了MSN
冰雲@不在狀態 說:
這和我的差不多
冰雲@不在狀態 說:
delphine 說:
看不到前面的東西!呵呵
delphine 說:
可是有一個問題,如果這時候我要添加一個功能,如果這個功能又是準系統,那是不是要所有的角色許可權劃分要重做一遍,這樣做太累了!!
delphine 說:
還有
delphine 說:
我要實現一個人可能擁有多個角色如何去做
delphine 說:
比如張三是打字員,同時他也是新聞發布員
冰雲@不在狀態 說:
那就是manytomany的關係啊
冰雲@不在狀態 說:
這有何難
冰雲@不在狀態 說:
user.getRoles()
冰雲@不在狀態 說:
就是給他多個角色唄
delphine 說:
另外還有一點也比較重要,我以後需要將其它系統統統與OA相串連需要提供介面,這個介面該如何在現在的許可權系統中考濾
冰雲@不在狀態 說:
這個嘛,看你的串連方式了
冰雲@不在狀態 說:
如果是小粒度的,就做一個facade,例如我的validate(user,resource,operation)
冰雲@不在狀態 說:
如果是大粒度,那就給個webservice之類的吧,
冰雲@不在狀態 說:
前提是,
冰雲@不在狀態 說:
role,resource,operation能夠唯一確定
delphine 說:
因為模型看得不多,能不能接合我給你的例子,把它套到你的模型中,我現在正在看你的模型!!
冰雲@不在狀態 說:
哦
冰雲@不在狀態 說:
你這裡的role就是role
冰雲@不在狀態 說:
你這得user就是user
冰雲@不在狀態 說:
不同的是,我允許user有多個role
delphine 說:
那ACTOR
冰雲@不在狀態 說:
每個role也可以對應user
冰雲@不在狀態 說:
actor是user和group的統稱
delphine 說:
many to many
delphine 說:
也就是是他們的基類嗎?
delphine 說:
group是什麼,能不能舉個例子?
冰雲@不在狀態 說:
group,也就是你的部門
delphine 說:
哦
冰雲@不在狀態 說:
這個group你可以考慮修改一下,不完全按照我的
冰雲@不在狀態 說:
我的group的作用就是
delphine 說:
管理user
冰雲@不在狀態 說:
一組人有相同的許可權,那麼就給這個group一個role
冰雲@不在狀態 說:
讓user屬於group
delphine 說:
嗯,這就解決了我的第一個問題
冰雲@不在狀態 說:
例如 某部門的人都可以看這個部門的新聞
冰雲@不在狀態 說:
那麼就給這個部門一個新聞閱讀的角色
冰雲@不在狀態 說:
瞭解吧
delphine 說:
把一些基本許可權放在一個基本組裡
冰雲@不在狀態 說:
既然user和group都是與role是many-to-many的
delphine 說:
一個使用者可不可以在多個組裡呢??
冰雲@不在狀態 說:
而且操作上基本一致,所以就做了actor
delphine 說:
顯然是可以的!
冰雲@不在狀態 說:
可以阿,user,role,group之間都是mtom
delphine 說:
嗯
delphine 說:
actor主要負責處理許可權
冰雲@不在狀態 說:
你的各種欄目等
冰雲@不在狀態 說:
no,actor就是user和group的統稱
冰雲@不在狀態 說:
你的各種欄目等,就是我說的資源
delphine 說:
明白 了
冰雲@不在狀態 說:
資源可以細分到不同粒度
冰雲@不在狀態 說:
例如,電子公文+id為5
delphine 說:
我想只做大力度的
delphine 說:
嗯
冰雲@不在狀態 說:
那就看你的設定了
冰雲@不在狀態 說:
另外就是個操作的概念
delphine 說:
你繼續說
冰雲@不在狀態 說:
對不同資源的操作
冰雲@不在狀態 說:
例如最簡單的CRUD
delphine 說:
CRUD什麼意思?
冰雲@不在狀態 說:
一個資源+一個操作,就是一個許可權
冰雲@不在狀態 說:
資料庫的CRUD!!增刪改查
冰雲@不在狀態 說:
一個資源+一個操作,就是一個許可權
冰雲@不在狀態 說:
例如,對電子公文的閱覽
delphine 說:
就是isRight(user,Resource,Operation)
冰雲@不在狀態 說:
把這個許可權Privilege,給一個role
冰雲@不在狀態 說:
那麼這個role就可以有這個許可權
冰雲@不在狀態 說:
把這個role給user,那user就可以閱讀電子公文了
冰雲@不在狀態 說:
ok ? 大致就這樣
delphine 說:
resource就相當於我的三級欄目是吧
冰雲@不在狀態 說:
不是
冰雲@不在狀態 說:
所有的欄目都是resource
delphine 說:
operaton就相當於我對三級欄目中的RCUD
冰雲@不在狀態 說:
可以做成層次的resource
冰雲@不在狀態 說:
是
冰雲@不在狀態 說:
還可以細分operation
delphine 說:
哦!
delphine 說:
怎麼細分?
冰雲@不在狀態 說:
例如list,read,create,delete,modify,manage,admin等等
delphine 說:
那這樣做是不是會給我的商務邏輯程式的編寫帶來困難
冰雲@不在狀態 說:
應該 不會吧
delphine 說:
比如我要先定義manage與admin等操作的權力
冰雲@不在狀態 說:
?不用阿
delphine 說:
要不商務邏輯怎麼知道manage要做什麼操作,admin要做什麼操作?
冰雲@不在狀態 說:
任何的資源都有這些操作
冰雲@不在狀態 說:
你可以考慮一個層次的operation模型
冰雲@不在狀態 說:
例如,建立一個公文
冰雲@不在狀態 說:
當然是create操作
delphine 說:
比如manage(create,list)admin(delete,modify,list),商務邏輯怎麼知道我的定義?
冰雲@不在狀態 說:
那麼,凡是operation包含create的都可以執行
冰雲@不在狀態 說:
還是這個,比如建立公文,你要求有create操作的許可權
冰雲@不在狀態 說:
那麼有manage許可權的就可以做,而admin就不能
delphine 說:
那我是不是要事先給Resource定義好Operation
冰雲@不在狀態 說:
不用
delphine 說:
為什嗎?
冰雲@不在狀態 說:
我的作法是,用到的時候再定義
delphine 說:
怎麼做呢?
冰雲@不在狀態 說:
就是判斷許可權的時候,例如判斷使用者是否可以對 資源A有B操作
冰雲@不在狀態 說:
這時候我當然要讀操作和資源表了,發現這二者還沒有關聯,那麼就建立一個許可權(A,B)
冰雲@不在狀態 說:
新建立的許可權,當然不可能有人有,所以返回false
delphine 說:
那B的操作在哪裡定義呢?我怎麼知道這時候manage包含(create,list)
冰雲@不在狀態 說:
操作一般是固定的一些,這倒是可以提前定義好
冰雲@不在狀態 說:
最多能有10來個
delphine 說:
10來個,我怎麼就覺得只有list,update,delete啊
冰雲@不在狀態 說:
嘿,這是你對資料庫的操作
冰雲@不在狀態 說:
別忘了還有檔案系統
冰雲@不在狀態 說:
比如move
delphine 說:
能不能把你的定義我看看!!
delphine 說:
哦!!
冰雲@不在狀態 說:
我就定義了資料庫的一些,和你的差不多,哈哈
delphine 說:
看來我的視野還是比較小啊!!嘿嘿
delphine 說:
這種定義方法我覺得可以用0000000000001這樣來定義
delphine 說:
你看好不好?
冰雲@不在狀態 說:
可以啊,操作內部的實現就隨便了
冰雲@不在狀態 說:
不過這樣做有局限呵呵
delphine 說:
好了,然後組合Operation 就是基本Operation或操作
delphine 說:
比如
delphine 說:
0001是讀
delphine 說:
0010是寫
delphine 說:
那0011就是讀寫
冰雲@不在狀態 說:
你這隻能定義一個鏈式層次
delphine 說:
你覺得呢?
冰雲@不在狀態 說:
樹形的怎麼辦
delphine 說:
樹型是什麼意思?
冰雲@不在狀態 說:
嗯,實際上我也是這樣定義的
冰雲@不在狀態 說:
不過覺得不很好
冰雲@不在狀態 說:
看情況吧! 不方便的話再改
冰雲@不在狀態 說:
用數字,增加一個操作就複雜了,全要改
delphine 說:
你是說樹型的許可權?
冰雲@不在狀態 說:
相當於數組和鏈表的區別
冰雲@不在狀態 說:
你在哪工作?
delphine 說:
要改只可能改基本許可權
delphine 說:
組合許可權可以由基本許可權得到
冰雲@不在狀態 說:
我是說增加一個操作就複雜了
delphine 說:
哦!!
delphine 說:
那到是的!!