收穫並非無緣無故。
任何一款架構都應該有自己的菜單和許可權管理原則,LML本來是沒有的,後來借鑒了一下就有了。LML毫不保留的借鑒了公司正在使用的Castle.MonoRail架構的菜單和許可權管理原則,以及許可權稽核原則,務求山寨的完美。由於本人能力有限,再者本人實際情況下並沒有閱讀過Castle.MonoRail的源碼,所以粗糙之處敬請原諒,以後還定會加以改正和改進。
菜單即連結,LML中每一個Action中的任何一個方法都可以成為一個菜單,實際情況下我們從沒有把一個沒有返回視圖的方法作為一個菜單,但是它可能對應一個許可權。
許可權並不是連結,但是訪問連結,即使是通過菜單訪問連結,都可能需要通過許可權審核。連結和許可權也有著莫大的關聯。
雖然我可能解釋的很粗糙,但是大家肯定能理解一下這樣的關係:
1, 一個菜單就是有一個連結。
2, 一個連結的訪問可能需要通過許可權的審核,即一個連結(可能是菜單)可以對應一個許可權。
還需要注意這樣一點:
3, LML中許可權並不會單獨存在,它依託於一個菜單而展現存在。原因是:在我們這樣的模組開發中,基本上一個Action類就對應一個模組,一個模組其實相當於一個菜單, 在這個Action類中出現的所有許可權,都讓它歸屬於這一個大菜單,便與收集和管理。
LML的菜單權限原則借鑒Castle.MonoRail,理解起來有些問題,請原諒。
使用LML的菜單和許可權管理原則需要4步:
1, 配置菜單和許可權初始化Bean,代碼如下:
許可權初始化Bean
<bean id="InitMenuPower" class="LML.Core.System.InitMenuPower"><property name="packages" value="LML.Action.System,LML.Action.Article"/> </bean>
初始化參數是需要初始化菜單和許可權的包名,多個請使用英文逗號隔開。
2, 為Action配置定義許可權攔截器,代碼如下:
自訂許可權攔截器
<interceptors><interceptor name="power" class="LML.Core.System.PowerInterceptor"></interceptor> <interceptor-stack name="baseStack"> <interceptor-ref name="defaultStack"></interceptor-ref> <interceptor-ref name="power"></interceptor-ref> </interceptor-stack> </interceptors>
3, 為方法(連結)定義菜單和許可權,LML中使用註解來定義,代碼如下:
使用註解定義菜單和許可權
@SysMenu(MenuId = "System", MenuName = "系統管理", MenuPic = "sys.png", MenuParent = "", MenuLevel = 1, MenuSort = 1) @SysPower(PowerId = "SystemPower", PowerMenu = "System", PowerName = "系統管理查看") public void System() { }
Sysmenu各個參數的意義分別為:菜單ID,菜單名稱,菜單圖片,上級菜單ID,菜單層級,菜單排序。
Syspower各個參數的意義分別為:許可權ID,所屬菜單ID,許可權名稱。
4, 初始化。
初始化操作:收集系統中如第三步驟定義的菜單和許可權,插入資料庫永久儲存。毫無疑問,資料庫結構需要自行設計。
以上四個步驟做完了,系統將能夠自動化收集菜單和許可權,並能夠進行管理。
下一集我們會說到初始化操作。
經過以上簡單介紹,想必大家都知道在LML如何簡單的使用菜單和許可權了,我覺得就算是讓你自行設計開發一套類似的菜單和許可權管理原則,也是小零食一袋了。我一直對LML的要求就是足夠簡單,對於菜單和許可權也不例外。沒有很複雜的概念,也沒有很複雜的文法,通過以上步驟就可以就使一個業務系統納入較為靈活的菜單和許可權管理。
當然了,這並不是完美的,必定簡單的策略做不了太複雜的事情。獻醜了。