flex_security使用

本文介绍了一个名为flex-security的权限控制系统,详细解释了如何利用SecurityController类及其提供的多种静态方法进行权限控制。文中还展示了四种不同的权限控制实现方式,包括使用元数据、样式名称、ActionScript代码及实现特定接口。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

flex-security的使用也很简单,首先引入flex_security.swf lib包,在进行权限控制之前通过SecurityControler的静态方法start开启权限控制。如我在主程序的创建后通过下面的语句加入开启权限控制:

 

var parem:ArrayCollection = new ArrayCollection();

parem.addItem("user");

SecurityControler.start(parem, "visible");

 

SecurityControler是进行权限控制的主要类,共包括七个静态方法,如下:

 

/**
* 启动权限控制
* permissions: 字符串列表,为拥有的权限
* default_control_by: 按那种方式控制权限,可选值: visible,enabled,remove,includeInLayout
*/
public static function start(permissions:ArrayCollection = null,default_control_by : String = "visible"):void 
 
//停止权限控制
public static function stop():void 
 
// 移除所有权限
public static function removeAllPerms():void
/**
* 更新拥有的权限
* perms: 字符串列表,用户拥有的权限
*/
public static function updatePerms(perms:ArrayCollection):void 
 
//增加一条权限
public static function addPerm(permName:String):void
 
// 减少一条权限
public static function removePerm(permName:String):void
 
// 判断是否拥有权限
//示例: if(SecurityControler.isPermitted('blog_delete')) { do some thing}
public static function isPermitted(perm:String):boolean
 

其中start方法用户开启权限控制,controlBy即为组件不具有权限时要进行的操作,包括5种操作,分别是visible,enabled,remove,includeInLayout,分别是:

 

visible : 可见性,有权限为true,没有权限为false

enabled : 激活状态,有权限为true,没有权限为false

includeInLayout : 有权限为true,没有权限为false

remove : 使用removeChild()将对象从parentremove掉,有权限不remove,没有权限则remove

all : 包含前面所讲的:visible,enabled,includeInLayout,但不包含remove

现在就可以对要进行控制的组件进行权限控制了,可以通过以下几种方法:

1.    注解的方式,即设置metadata

[Protected(permission="user",id="userP",controlBy="enabled")]

上面的方法说明我对iduserP的组件进行权限控制,如果其不具有user的权限,就通过enabled的方式进行处理,即将其设为不可用,使用metadata的方式进行权限控制可以使一个组件同时具有两个以上不同权限,如下:

[Protected(permission="admin,customer",id="customerP",controlBy="enabled")]

上面的语句说明,customerP同时具有admincustomer的权限,不管用户拥有哪一种权限改组件都将可用,否则不可用。

2.    通过styleName的方式进行设置

<mx:Button label="new user" styleName="security(user_new,enabled)" />

则是如果用户拥有权限user_new,则可以使用该组件,否则变为不可用。styleName里的写法是security(perm, controlBy),两个参数,前一个是权限,后一个是控制方式,两个参数都可省略,如果权限省略则以其ID代替,后者省略则以开启权限时的默认方式进行处理。

这里他获取权限和控制方式是通过正则表达式进行分割的,所使用的正则表达式为 “/security\((\w*),?(\w*)\)?/”,可以看出通过括号内的逗号分割成两个参数,一个为权限一个为控制方式,因此不能为一个组件设置多个权限,但如果需要的话可以修改其源码以实现此功能,但是由于在实际做程序时此属性有可能有其他用途,因此并不推荐使用styleName的方式进行权限控制。

3.    通过actionscript代码进行手动配置

可以在通过在actionscript代码中手动的为组件增加权限控制,如下

 
SecurityControler.start(null,'enabled');
//增加需要权限保护的UI资源
SecurityControler.addSecurityAction(user_new);

上面即说开启权限控制,默认使用enabled的方式控制,并且增加了IDuser_new的组件进行权限控制,addSecrityAction共有三个参数,如下:

/* 增加需要保护的资源*/
           public static function addSecurityAction( comp: UIComponent, permission:String=null, controlBy : String = null) : void {
                                                         ……

}

可以看出,第一个参数是必须的,为要进行控制的组件,第二个参数为权限名,可省略,如果为空则以UIID的权限名,第三个参数为控制方式,可省略,为空则使用默认。然后就可以动态的增加减少用户权限进行UI控制了。

4.通过实现接口的方式进行控制

最后一种方法,可以通过实现接口的方式进行权限控制,如下:

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"

               implements="cn.org.rapid_framework.flex_security.ISecurityMetadata"
               creationComplete="creationComplete()" xmlns:local="*">
 
        <mx:Script>
               <![CDATA[
                            import cn.org.rapid_framework.flex_security.SecurityAction;
                           import mx.collections.ArrayCollection;
                           import cn.org.rapid_framework.flex_security.SecurityControler;
                           import cn.org.rapid_framework.flex_security.ISecurityMetadata;
 
                           // 实现ISecurityMetadata接口并返回需要权限保护的UI组件
                         public function getSecurityActions() : Array{
                               return [
                               new SecurityAction(user_new),
                               new SecurityAction(user_delete),
                               new SecurityAction(user_update),
                               new SecurityAction(user_search)
                               ];
                         }
                         public function creationComplete():void {
                               //启动权限控制
                               SecurityControler.start();
                        }
                     private var permissionList : Array = ['user_new', 'user_delete', 'user_update', 'user_search', 'passwordInput'];
                   ]]>
               </mx:Script>
<mx:HBox>
<mx:Label text="右键可以查看源代码:Permission: " fontSize="15" />
<mx:ComboBox id="permInput" dataProvider="{permissionList}"/>
<mx:Button click="SecurityControler.addPerm(permInput.selectedLabel)" label="Add" />
<mx:Button click="SecurityControler.removePerm(permInput.selectedLabel)" label="Remove" />
<mx:Button click="SecurityControler.removeAllPerms()" label="Clean All" />
<mx:Button click="SecurityControler.addAllPerms(new ArrayCollection(permissionList))" label="Add All" />
</mx:HBox>
               <!-- 被权限控制的按钮,没有权限将看不见下面的相关按钮 -->
               <mx:HBox>
                               <mx:Button label="new user" id="user_new" />
                               <mx:Button label="delete user"  id="user_delete" />
                               <mx:Button label="update user" id="user_update" />
                               <mx:Button label="search user"  id="user_search" />
                               <mx:TextArea id="passwordInput"/>
               </mx:HBox>
</mx:Application>
内容概要:本文围绕直流微电网中带有恒功率负载(CPL)的DC/DC升压转换器的稳定控制问题展开研究,提出了一种复合预设性能控制策略。首先,通过精确反馈线性化技术将非线性不确定的DC转换器系统转化为Brunovsky标准型,然后利用非线性扰动观测器评估负载功率的动态变化和输出电压的调节精度。基于反步设计方法,设计了具有预设性能的复合非线性控制器,确保输出电压跟踪误差始终在预定义误差范围内。文章还对比了多种DC/DC转换器控制技术如脉冲调整技术、反馈线性化、滑模控制(SMC)、主动阻尼法和基于无源性的控制,并分析了它们的优缺点。最后,通过数值仿真验证了所提控制器的有效性和优越性。 适合人群:从事电力电子、自动控制领域研究的学者和工程师,以及对先进控制算法感兴趣的研究生及以上学历人员。 使用场景及目标:①适用于需要精确控制输出电压并处理恒功率负载的应用场景;②旨在实现快速稳定的电压跟踪,同时保证系统的鲁棒性和抗干扰能力;③为DC微电网中的功率转换系统提供兼顾瞬态性能和稳态精度的解决方案。 其他说明:文中不仅提供了详细的理论推导和算法实现,还通过Python代码演示了控制策略的具体实现过程,便于读者理解和实践。此外,文章还讨论了不同控制方法的特点和适用范围,为实际工程项目提供了有价值的参考。
内容概要:该论文介绍了一种名为偏振敏感强度衍射断层扫描(PS-IDT)的新型无参考三维偏振敏感计算成像技术。PS-IDT通过多角度圆偏振光照射样品,利用矢量多层光束传播模型(MSBP)和梯度下降算法迭代重建样品的三维各向异性分布。该技术无需干涉参考光或机械扫描,能够处理多重散射样品,并通过强度测量实现3D成像。文中展示了对马铃薯淀粉颗粒和缓步类动物等样品的成功成像实验,并提供了Python代码实现,包括系统初始化、前向传播、多层传播、重建算法以及数字体模验证等模块。 适用人群:具备一定光学成像和编程基础的研究人员,尤其是从事生物医学成像、材料科学成像领域的科研工作者。 使用场景及目标:①研究复杂散射样品(如生物组织、复合材料)的三维各向异性结构;②开发新型偏振敏感成像系统,提高成像分辨率和对比度;③验证和优化计算成像算法,应用于实际样品的高精度成像。 其他说明:PS-IDT技术相比传统偏振成像方法具有明显优势,如无需干涉装置、无需机械扫描、可处理多重散射等。然而,该技术也面临计算复杂度高、需要多角度数据采集等挑战。文中还提出了改进方向,如采用更高数值孔径(NA)物镜、引入深度学习超分辨率技术等,以进一步提升成像质量和效率。此外,文中提供的Python代码框架为研究人员提供了实用的工具,便于理解和应用该技术。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值