網(wǎng)上搜索了一番,用于控制flex UI組件的權(quán)限的框架只有chimp相近一些.
但是不喜歡他的基于flex annotation的權(quán)限控制方式.遂決定自己寫一套flex權(quán)限控制框架。
如果你熟悉作者的另外一套javascript 表單驗證框架rapid-validation,將會對下面的使用方式有似曾相識的感覺。
一.快速開始
1) 下載并添加flex_security.swf在你的flex libs中
2) 啟動權(quán)限控制
//啟動權(quán)限控制,permissions為用戶擁有的權(quán)限字符串列表
SecurityControler.start(permissions,'visible');
3) 通過增加styleName=security(permission,controlBy)為你的按鈕增加權(quán)限控制
<mx:Button label="new user" styleName="security(user_new)" />
<mx:Button label="update user" styleName="security(user_update)"/>
如上,如果用戶擁有這兩個權(quán)限(permissions):user_new,user_update,則可以見到這兩個按鈕,然后執(zhí)行相關(guān)操作
注意:如果你不喜歡styleName添加權(quán)限保護(hù),還有其它方式:如實現(xiàn)接口,編程方式增加,請查看后面的demo
二.ActionScript代碼的權(quán)限控制
if(SecurityControler.isPermitted('blog_delete'))
{
//execute delete blog action
}
三.在線demo
四.詳細(xì)描述
1) styleName: security(permission,controlBy)
- permission: 權(quán)限標(biāo)識,用戶擁有該權(quán)限,才可以執(zhí)行相關(guān)操作??蛇x參數(shù),如果為空,則會取該comp.id作為permission
- controlBy: 按什么方式來控制權(quán)限,有(visible,enabled,includeInLayout,remove)??蛇x參數(shù),如果為空,則取SecurityControler?.start(perms,defaultControlBy)中的defaultControlBy的值,默認(rèn)是visible
2) controlBy: 按什么方式來控制權(quán)限
- visible : 可見性,有權(quán)限為true,沒有權(quán)限為false
- enabled : 激活狀態(tài),有權(quán)限為true,沒有權(quán)限為false
- includeInLayout : 有權(quán)限為true,沒有權(quán)限為false
- remove : 使用removeChild()將對象從parent中remove掉,有權(quán)限不remove,沒有權(quán)限則remove
- all : 包含前面所講的:visible,enabled,includeInLayout,但不包含remove
3) SecurityControler類,包含全部的主要權(quán)限控制操作
/**
* 啟動權(quán)限控制
* permissions: 字符串列表,為擁有的權(quán)限
* default_control_by: 按那種方式控制權(quán)限,可選值: visible,enabled,remove,includeInLayout
*/
public static function start(permissions:ArrayCollection = null,default_control_by : String = "visible"):void

//停止權(quán)限控制
public static function stop():void

// 移除所有權(quán)限
public static function removeAllPerms():void
/**
* 更新?lián)碛械臋?quán)限
* perms: 字符串列表,用戶擁有的權(quán)限
*/
public static function updatePerms(perms:ArrayCollection):void

//增加一條權(quán)限
public static function addPerm(permName:String):void

// 減少一條權(quán)限
public static function removePerm(permName:String):void

// 判斷是否擁有權(quán)限
//示例: if(SecurityControler.isPermitted('blog_delete')) { do some thing}
public static function isPermitted(perm:String):boolean
項目地址: http://code.google.com/p/flex-security/