2010-06-21 64 views
1

我正在研究一個應用程序,該應用程序將擁有6個ARO組以覆蓋所需的權限範圍。對每個方法都有* _add,* _edit,* _index,* _view等方法是最好的做法嗎?這似乎有點代碼過載和維護頭痛。在「最便宜」的方式我能想象與路由處理它是一樣的東西:CakePHP w/ACL:許多組的最佳做法是路由?

// core: edit 
function _edit($id = null) 
{ 
    // do stuff 
} 

function admin_edit($id = null) 
{ 
    $this->_edit($id); 
} 

function manager_edit($id = null) 
{ 
    $this->_edit($id); 
} 

function clerk_edit($id = null) 
{ 
    $this->_edit($id); 
} 

/* ...and on and on... */ 

而且在必要時,比如說,一組被允許只能編輯用戶自己的項目,或類似的限制折騰。

還有另一種推薦的技術,或者這是最好的做法嗎?

+0

你可能想檢查這個 - http://stackoverflow.com/questions/54230/cakephp-acl-database-setup-aro-aco-structure – bancer 2010-06-21 22:08:25

+0

我不去'最佳實踐',但如果我做了,那不會是一個。 – Leo 2010-06-22 08:08:08

+0

有時候過濾用戶很有用。我在app_controller的beforeRender方法中設置了一些視圖變量。 $ usersIndexAllowed = $ this-> Acl-> check($ user,「users/index」); $ configureAllowed = $ this-> Acl-> check($ user,「siteAdmins/configure」); $ this-> set(compact('usersIndexAllowed','configureAllowed')); – Leo 2010-06-22 08:16:44

回答

0

大概你想爲每個組提供不同的功能?

如果情況並非如此,則不需要針對每個組採用不同的CRUD方法。

另一方面,如果是這種情況,請查看CRUD方法中的switch語句,以確定誰具有什麼功能。

沒有必要爲每個組設置一個方法。

+0

除了「自己」的訪問之外,沒有必要有不同的功能。考慮這個人爲的例子特權結構,其中的特權堆棧: 客戶:索引自己,查看自己的,編輯自己的 職員:索引的所有加 經理:查看所有,編輯所有 管理員:完全訪問 我應該提供的東西就像在原來的職位中那樣澄清。 – tomws 2010-06-22 14:22:09

+0

廢話...只是注意到,沒有按預期的格式。再試一次。客戶:索引自己,查看自己,編輯自己。職員:索引全部,添加。經理:查看全部,編輯全部。管理員:完全訪問。 – tomws 2010-06-22 15:19:48

+0

我明白了[我認爲你不能格式化評論]。我會按照我的建議去做(並完成)。使用ACL來過濾方法訪問,然後進一步微調該方法中的訪問進入條件 - 無論是開關還是取決於您的偏好。 – Leo 2010-06-22 15:37:02