`
萧_瑟
  • 浏览: 160562 次
社区版块
存档分类
最新评论

flexSecurity 简单权限控制

    博客分类:
  • Flex
阅读更多

最终效果:



首先把 flex_security.swc 放进你项目的lib文件中。

 

如图:


 

 

四种权限控制方式:

 

 

1. styleName

 

 

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
			   xmlns:s="library://ns.adobe.com/flex/spark" 
			   xmlns:mx="library://ns.adobe.com/flex/mx" 
			   width="100%" height="100%"
			   viewSourceURL="http://code.google.com/p/flex-security/source/browse/trunk/flex_security_demo/src/helloworld_by_styleName.mxml"
			   creationComplete="creationComplete()">
	<s:layout>
		<s:VerticalLayout horizontalAlign="center"/>
	</s:layout>
	<fx:Script>
		<![CDATA[
			import cn.org.rapid_framework.flex_security.SecurityControler;
			
			import mx.collections.ArrayCollection;
			import mx.events.FlexEvent;

			[Bindable]
			private var permissionList : Array = ['cc','sq','lb','ta_input'];
			
			protected function creationComplete():void
			{
				//启动权限控制
				SecurityControler.start(null,'visible');
			}

		]]>
	</fx:Script>
	
	<s:HGroup>
		<mx:HBox>
			<mx:ComboBox id="permInput" dataProvider="{permissionList}"/>
			<mx:Button click="SecurityControler.addPerm(permInput.selectedLabel)" label="添加权限" />
			<mx:Button click="SecurityControler.removePerm(permInput.selectedLabel)" label="移除权限" />
			<mx:Button click="SecurityControler.addAllPerms(new ArrayCollection(permissionList))" label="添加所有权限" />
			<mx:Button click="SecurityControler.removeAllPerms()" label="移除所有权限" />	
		</mx:HBox>
	</s:HGroup>
	
	<s:HGroup>
		<!-- 通过styleName增加需要权限保护的组件,没有权限将不能进行相关操作 -->
		<mx:HBox>
			<!-- id要和声明的对应,enabled表示显现出来,由于受到权限的控制,不可启用-->
			<mx:Button label="曹操" id="cc" styleName="security(null,enabled)" />
			<!-- 没有声明id,那么在security内要写上 -->
			<mx:Button label="孙权" styleName="security(sq)"/>
			<!-- 注意这个remove属性,这里声明了remove,那么下面的组件就不受security的控制而会显现出来了 -->
			<mx:Button label="刘备" styleName="security(lb,remove)"/>
			<!-- 这个算是容易点的写法吧 -->
			<mx:TextArea id="ta_input" styleName="security"/>
		</mx:HBox>
	</s:HGroup>
</s:Application>

 

 

参考:helloworld_by_styleName

 

 

2. manual

 

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
			   xmlns:s="library://ns.adobe.com/flex/spark" 
			   xmlns:mx="library://ns.adobe.com/flex/mx" 
			   width="100%" height="100%"
			   viewSourceURL="http://code.google.com/p/flex-security/source/browse/trunk/flex_security_demo/src/helloworld_by_manual.mxml"
			   creationComplete="creationComplete()">
	<s:layout>
		<s:VerticalLayout horizontalAlign="center"/>
	</s:layout>
	<fx:Script>
		<![CDATA[
			import cn.org.rapid_framework.flex_security.SecurityControler;
			
			import mx.collections.ArrayCollection;
			import mx.events.FlexEvent;
			
			[Bindable]
			private var permissionList : Array = ['cc','sq','lb','ta_input'];
			
			protected function creationComplete():void
			{
				//启动权限控制
				SecurityControler.start(null,'visible');
				
				//增加需要权限保护的UI资源
				SecurityControler.addSecurityAction(cc);
				SecurityControler.addSecurityAction(sq);
				SecurityControler.addSecurityAction(lb); 
			}
			
		]]>
	</fx:Script>
	
	<s:HGroup>
		<mx:HBox>
			<mx:ComboBox id="permInput" dataProvider="{permissionList}"/>
			<mx:Button click="SecurityControler.addPerm(permInput.selectedLabel)" label="添加权限" />
			<mx:Button click="SecurityControler.removePerm(permInput.selectedLabel)" label="移除权限" />
			<mx:Button click="SecurityControler.addAllPerms(new ArrayCollection(permissionList))" label="添加所有权限" />
			<mx:Button click="SecurityControler.removeAllPerms()" label="移除所有权限" />	
		</mx:HBox>
	</s:HGroup>
	
	<s:HGroup>
		<!-- 被权限控制的按钮,没有权限将看不见下面的相关按钮 -->
		<mx:HBox>
			<!-- 看见没有,主要还是id和permissionList声明的对应 -->
			<mx:Button label="曹操" id="cc"/>
			<mx:Button label="孙权" id="sq"/>
			<mx:Button label="刘备" id="lb"/>
			<mx:TextArea id="ta_input"/>
		</mx:HBox>
	</s:HGroup>
</s:Application>
 

参考:helloworld_by_manual

 

 

3. interface

 

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
			   xmlns:s="library://ns.adobe.com/flex/spark" 
			   xmlns:mx="library://ns.adobe.com/flex/mx" 
			   width="100%" height="100%"
			   viewSourceURL="http://code.google.com/p/flex-security/source/browse/trunk/flex_security_demo/src/helloworld_by_interface.mxml"
			   implements="cn.org.rapid_framework.flex_security.ISecurityMetadata"
			   creationComplete="creationComplete()">
	<s:layout>
		<s:VerticalLayout horizontalAlign="center"/>
	</s:layout>
	<fx:Script>
		<![CDATA[
			import cn.org.rapid_framework.flex_security.SecurityAction;
			import cn.org.rapid_framework.flex_security.SecurityControler;
			//注意添加上面的实现---implements="cn.org.rapid_framework.flex_security.ISecurityMetadata"
			import cn.org.rapid_framework.flex_security.ISecurityMetadata;
			
			import mx.collections.ArrayCollection;
			import mx.events.FlexEvent;
			
			[Bindable]
			private var permissionList : Array = ['cc','sq','lb','ta_input'];
			
			protected function creationComplete():void
			{
				//启动权限控制
				SecurityControler.start(null,'visible');
			}
			
			//这里返回需要权限保护的UI资源
			public function getSecurityActions() : Array {
				return [
					new SecurityAction(cc),
					new SecurityAction(sq),
					new SecurityAction(lb)
				];
			}
			
		]]>
	</fx:Script>
	
	<s:HGroup>
		<mx:HBox>
			<mx:ComboBox id="permInput" dataProvider="{permissionList}"/>
			<mx:Button click="SecurityControler.addPerm(permInput.selectedLabel)" label="添加权限" />
			<mx:Button click="SecurityControler.removePerm(permInput.selectedLabel)" label="移除权限" />
			<mx:Button click="SecurityControler.addAllPerms(new ArrayCollection(permissionList))" label="添加所有权限" />
			<mx:Button click="SecurityControler.removeAllPerms()" label="移除所有权限" />	
		</mx:HBox>
	</s:HGroup>
	
	<s:HGroup>
		<!-- 被权限控制的按钮,没有权限将看不见下面的相关按钮 -->
		<mx:HBox>
			<!-- 看见没有,主要还是id和permissionList声明的对应 -->
			<mx:Button label="曹操" id="cc"/>
			<mx:Button label="孙权" id="sq"/>
			<mx:Button label="刘备" id="lb"/>
			<mx:TextArea id="ta_input"/>
		</mx:HBox>
	</s:HGroup>
</s:Application>
 

参考:helloworld_by_interface

 

 

4. annotation

 

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
			   xmlns:s="library://ns.adobe.com/flex/spark" 
			   xmlns:mx="library://ns.adobe.com/flex/mx" 
			   width="100%" height="100%"
			   viewSourceURL="http://code.google.com/p/flex-security/source/browse/trunk/flex_security_demo/src/helloworld_by_annotation.mxml"
			   creationComplete="creationComplete()">
	<s:layout>
		<s:VerticalLayout horizontalAlign="center"/>
	</s:layout>
	
	<!-- 通过元数据[Protected(id='compId',permission='perm',controlBy='enabled')]确定那个UI组件需要权限保护 -->
	<fx:Metadata>
		[Protected(id="cc")]
		[Protected(id="sq")]
		[Protected(id="lb")]
	</fx:Metadata>
	
	<fx:Script>
		<![CDATA[
			import cn.org.rapid_framework.flex_security.SecurityControler;
			
			import mx.collections.ArrayCollection;
			import mx.events.FlexEvent;
			
			[Bindable]
			private var permissionList : Array = ['cc','sq','lb','ta_input'];
			
			protected function creationComplete():void
			{
				//启动权限控制
				SecurityControler.start(null,'visible');
			}
			
		]]>
	</fx:Script>
	
	<s:HGroup>
		<mx:HBox>
			<mx:ComboBox id="permInput" dataProvider="{permissionList}"/>
			<mx:Button click="SecurityControler.addPerm(permInput.selectedLabel)" label="添加权限" />
			<mx:Button click="SecurityControler.removePerm(permInput.selectedLabel)" label="移除权限" />
			<mx:Button click="SecurityControler.addAllPerms(new ArrayCollection(permissionList))" label="添加所有权限" />
			<mx:Button click="SecurityControler.removeAllPerms()" label="移除所有权限" />	
		</mx:HBox>
	</s:HGroup>
	
	<s:HGroup>
		<mx:HBox>
			<mx:Button label="曹操" id="cc"/>
			<mx:Button label="孙权" id="sq"/>
			<mx:Button label="刘备" id="lb"/>
			<mx:TextArea id="ta_input"/>
		</mx:HBox>
	</s:HGroup>
</s:Application>

 

参考:helloworld_by_annotation

 

 

按实际情况抉择使用

 

  • 大小: 4.8 KB
  • 大小: 10.8 KB
分享到:
评论
3 楼 萧_瑟 2013-02-27  
usdark 写道
插件内部的SecurityActionCache是个单例模式,其类变量actions引用了外部定义的对象,且没有释放,导致外部对象不需要再使用的时候,无法垃圾回收,最终导致该对象的所有父对象也无法回收,使程序崩溃,希望插件开发者能考虑下这个问题


呵呵,学习了,这个Demo我是参考http://code.google.com/p/flex-security/source/browse/trunk/flex_security_demo/src/helloworld_by_annotation.mxml 这份文档的。可能是因为demo的关系吧,所以没完美处理。
2 楼 usdark 2013-02-27  
插件内部的SecurityActionCache是个单例模式,其类变量actions引用了外部定义的对象,且没有释放,导致外部对象不需要再使用的时候,无法垃圾回收,最终导致该对象的所有父对象也无法回收,使程序崩溃,希望插件开发者能考虑下这个问题
1 楼 usdark 2013-02-27  
这个插件用了静态方法,并给方法内部赋对象,使得该对象引用无法释放,存在很严重的内存泄露问题

相关推荐

    flex 权限 控制 前台

    flex 权限 控制 前台 1. 文件的所有权益归上传用户所有 2. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途 3. CSDN下载频道仅提供交流平台,并不能对任何下载内容负责 4. 下载文件中如有侵权或不适当...

    flex-security

    综上所述,Flex Security是Flex应用开发中不可或缺的一部分,它涉及到用户界面的可见性和可操作性控制,以及权限模型的建立和实施。理解并熟练掌握这些知识点,对于开发出安全、健壮且用户体验良好的Flex应用程序至...

    flex+java权限管理系统

    综上所述,"flex+java权限管理系统"是一个集成了Flex前端技术、Java后端框架的权限管理解决方案,通过合理的架构设计和配置,实现了高效、安全的权限控制。理解并掌握这个系统的配置和实现,对于提升企业级应用开发...

    flex实现简单浏览器

    flex实现简单浏览器,flex AIR中HTML控件实现了简单的网页浏览效果

    Flex控制swf简单源码

    本篇文章将深入探讨如何使用Flex来控制SWF文件,以及相关的关键技术点。 首先,SWF全称是Small Web Format,是Adobe Flash平台用于展示交互式内容、动画或应用程序的文件格式。在Flex应用中,我们经常需要动态加载...

    flex 权限系统研究

    1. 数据访问控制:在Flex中,当用户尝试访问或修改数据时,应检查其是否有相应的权限。例如,只有管理员才能删除用户记录。 2. 功能访问控制:对于特定功能,如设置、管理等,可以创建对应的权限,只有拥有该权限的...

    FLEX+SSH某水源检测系统完整代码(带登录界面权限控制)

    标题中的"FLEX+SSH某水源检测系统完整代码(带登录界面权限控制)"指的是一个基于Flex前端技术,结合SSH(Struts2、Spring2、Hibernate3)后端框架的水资源监测系统的完整源代码,该系统包含了用户登录界面以及权限...

    flex4 简单增删改实例 使用mysql数据库

    flex4 简单增删改实例 使用mysql数据flex4 简单增删改实例 使用mysql数据flex4 简单增删改实例 使用mysql数据flex4 简单增删改实例 使用mysql数据flex4 简单增删改实例 使用mysql数据

    Flex控制外部引用SWF的播放进度源码

    在Flex开发中,有时我们需要加载并控制外部的SWF文件,比如实现自定义的播放进度条功能。这个场景常见于创建交互式应用或者多媒体展示。本文将深入探讨如何在Flex中实现对引入SWF文件播放进度的控制。 首先,我们要...

    Flex + Java简单例子

    【Flex + Java简单例子】是关于使用Flex与Java进行跨域数据交互的一个基础教程,主要涉及Flex客户端和Java服务器端的配置与开发。这个例子旨在展示如何通过BlazeDS库在Flex前端和Java后端之间建立通信。 首先,我们...

    FLEX简单应用工程

    **FLEX简介** FLEX(Flexible Application by Adobe)是由Adobe公司开发的...总的来说,“FLEX简单应用工程”是一个适合初学者的项目,通过实践可以深入理解FLEX的基本概念和开发流程,为今后的RIA开发打下坚实基础。

    flex画板简单版

    标题中的“flex画板简单版”指的是一个基于Adobe Flex技术实现的在线绘画应用程序。Flex是一种开源的、基于ActionScript的框架,用于构建富互联网应用程序(RIA)。它允许开发者使用MXML和ActionScript来构建交互式...

    flex air简单的通讯录

    标题 "flex air简单的通讯录" 暗示了这是一个基于Adobe Flex和Adobe AIR技术开发的简单通讯录应用程序。Flex是用于构建富互联网应用程序(RIA)的开源框架,它使用MXML和ActionScript作为主要开发语言。AIR(Adobe ...

    flex本地安全域设置

    4. **运行FlexSecurity.bat**:在解压文件后直接运行FlexSecurity.bat,意味着它会自动执行一些脚本来调整Flex应用的安全配置。这通常包括创建或修改`crossdomain.xml`文件,该文件定义了跨域策略,允许Flex应用从...

    cfw-flex 通用系统框架Flex版(包括登录、主页、功能导航和权限管理控制)

    权限管理可能通过Spring Security或自定义的解决方案来实现,以控制用户的登录、权限验证和操作权限。 6. **db文件夹**: 这个文件夹可能包含了数据库相关的配置、脚本或者实体类,如数据库连接配置、数据表结构定义...

    flex相册 简单易学

    flex相册flex相册flex相册flex相册flex相册flex相册flex相册flex相册flex相册

    flex测试简单分析案例页面

    flex测试页,简单测试flex相关属性,做个备忘,以便日后使用。

Global site tag (gtag.js) - Google Analytics