任何一款框架都應該有自己的菜單和權限管理策略,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的要求就是足夠簡單,對于菜單和權限也不例外。沒有很復雜的概念,也沒有很復雜的語法,通過以上步驟就可以就使一個業務系統納入較為靈活的菜單和權限管理。
當然了,這并不是完美的,必定簡單的策略做不了太復雜的事情。獻丑了。
您正在看的文章來自瘋狂軟件教育中心 www.fkjava.org
信息咨詢:Q564205990 星老師