package cn.com.jgt.view
{
import flash.errors.IllegalOperationError;

/**
* actionscript类的构造方法不能是private,只能借助于包外类实现单例模式
*/
public class SingletonLoginUser
{
/**声明一个当前类的私有实例*/
private static var loginUser:LoginUser=null;

public function Singleton():void
{
throw new IllegalOperationError("Can't new SingletonFactory(),Please call getInstance()!");
}

/**构造方法需要传入一个包外类SingleClass的实例*/
public static function getInstance():LoginUser{
if(SingletonLoginUser.loginUser==null){
SingletonLoginUser.loginUser=new LoginUser();
}
return SingletonLoginUser.loginUser;
}
}
}

/**
* 在package声明之外的源代码只在本源文件中可见。
* 保存用户登录信息,包括用户名,区域,权限,部门等。
* 保存系统配置文件信息以及行政区域数据等。
*/
import flash.utils.describeType;

import mx.collections.ArrayCollection;

import cn.com.jgt.common.CommonUtils;
import cn.com.jgt.widgets.BusinessManage.PingTaiPeiZhi.EncapsulationInfos.UserInfo;

class LoginUser {
//登录用户信息
public var userInfo:UserInfo=new UserInfo();
//功能集合
public var functionCollection:ArrayCollection=new ArrayCollection();
//部门名称
public var branchName:String=new String();
//部门id
public var branchId:String=new String();
//行政区域 到村、到组
public var regionTreeRefGroup:String =new String();
public var regionTreeRefVillage:String =new String();
//保存配置文件信息
public var ServerConfig:XML = new XML();
public var LayerConfig:XML = new XML();
//用户部门权属
public var quanshu:String="";

/** 设置登录用户信息 */
public function setUserInfo(user:UserInfo):void{
this.userInfo=user;
}

/** 获取登录用户信息 */
public function getUserInfo():UserInfo{
return this.userInfo;
}

/**
* 遍历页面控件,验证各类控件是否具备操作权限。
* 验证包括按钮(Button),标签(Label),图片(Image),表格框列(GridColumn)控件的权限
*/
public function checkQuanxian(object:Object):void{

var instanceInfo:XML = describeType(object);
//输出xml
//trace(instanceInfo);

//获取所有的Button控件并验证权限(根据Button的name属性值验证权限)
var prop_btn:XMLList =instanceInfo.accessor.(@type=="spark.components::Button")
// 遍历Button信息
for each(var propertyInfo:XML in prop_btn) {
/*
* propertyInfo.@name //获取Button的id
* object[propertyName] //根据Button的id获取Button对象
* object[propertyName].name //根据Button的id获取Button对象的name属性值
* Button未定义name属性值时,name属性值为系统默认,如Button12321;定义了name属性时,获取name属性值
*/
var propertyName:String = propertyInfo.@name; // 获取Button的id
if(null!=object[propertyName]){ //获取的Button对象不为空时
if((object[propertyName].name).substring(0,6)!="Button"){ //如果Button指定了name属性,验证其权限
if((object[propertyName].name).substring(0,5)=="MENU_"){ //验证是否满足权限名称格式规范
if(checkYorN(object[propertyName].name)){ //校验权限,具备权限显示
object[propertyName].visible=true;
object[propertyName].includeInLayout=true;
}else{ //不具备权限影藏
object[propertyName].visible=false;
object[propertyName].includeInLayout=false;
}
}
}
}
}

//获取所有的label控件并验证权限(根据Label的name属性值验证权限,Label必须指定id属性)
var prop_label:XMLList = instanceInfo.accessor.(@type=="spark.components::Label");
// 遍历label信息
for each(var propertyInfo1:XML in prop_label) {
var propertyName1:String = propertyInfo1.@name; // 获取label的id
if(null!=object[propertyName1]){ //获取的label对象不为空时
if((object[propertyName1].name).substring(0,5)!="Label"){ //如果Label指定了name属性,验证其权限
if((object[propertyName1].name).substring(0,5)=="MENU_"){ //验证是否满足权限名称格式规范
if(checkYorN(object[propertyName1].name)){ //校验权限,具备权限显示
object[propertyName1].visible=true;
object[propertyName1].includeInLayout=true;
}else{ //不具备权限影藏
object[propertyName1].visible=false;
object[propertyName1].includeInLayout=false;
}
}
}
}
}

//获取所有的Image控件并验证权限(根据Image的id属性值验证权限)
var prop_image:XMLList =instanceInfo.accessor.(@type=="spark.components::Image");
// 遍历Image信息
for each(var propertyInfo2:XML in prop_image) {
var propertyName2:String = propertyInfo2.@name; // 获取Image的id
if(null!=object[propertyName2]){ //获取的Image对象不为空时
if((object[propertyName2].id).substring(0,5)!="Image"){ //如果Image指定了id属性,验证其权限
if((object[propertyName2].id).substring(0,5)=="MENU_"){ //验证是否满足权限名称格式规范
if(checkYorN(object[propertyName2].id)){ //校验权限,具备权限显示
object[propertyName2].visible=true;
object[propertyName2].includeInLayout=true;
}else{ //不具备权限影藏
object[propertyName2].visible=false;
object[propertyName2].includeInLayout=false;
}
}
}
}
}

//获取所有的GridColumn控件并验证权限(根据GridColumn的id属性值验证权限)
var prop_gridColumn:XMLList = instanceInfo.accessor.(@type=="spark.components.gridClasses::GridColumn");
// 遍历GridColumn信息
for each(var propertyInfo3:XML in prop_gridColumn) {
var propertyName3:String = propertyInfo3.@name; // 获取GridColumn的id
if(null!=object[propertyName3]){ //获取的GridColumn对象不为空时
if(propertyName3.substring(0,4)!="Grid"){ //如果GridColumn指定了id属性,验证其权限
if(propertyName3.substring(0,5)=="MENU_"){ //验证是否满足权限名称格式规范
if(checkYorN(propertyName3)){ //校验权限,具备权限显示
object[propertyName3].visible=true;
}else{ //不具备权限影藏
object[propertyName3].visible=false;
}
}
}
}
}

//获取所有的HGroup控件并验证权限(根据HGroup的name属性值验证权限,HGroup必须指定id属性)
var prop_HGroup:XMLList =instanceInfo.accessor.(@type=="spark.components::HGroup");
//遍历HGroup信息
for each(var propertyInfo4:XML in prop_HGroup) {
var propertyName4:String = propertyInfo4.@name; // 获取HGroup的name
if(null!=object[propertyName4]){ //获取的HGroup对象不为空时
if((object[propertyName4].name).substring(0,6)!="HGroup"){ //如果HGroup指定了name属性,验证其权限
if((object[propertyName4].name).substring(0,5)=="MENU_"){ //验证是否满足权限名称格式规范
if(checkYorN(object[propertyName4].name)){ //校验权限,具备权限显示
object[propertyName4].visible=true;
object[propertyName4].includeInLayout=true;
}else{ //不具备权限影藏
object[propertyName4].visible=false;
object[propertyName4].includeInLayout=false;
}
}
}
}
}

//获取所有的DropDownList控件并验证权限(根据DropDownList的name属性值验证权限,DropDownList必须指定id属性)
var prop_DropDownList:XMLList =instanceInfo.accessor.(@type=="spark.components::DropDownList");
//遍历DropDownList信息
for each(var propertyInfo5:XML in prop_DropDownList) {
var propertyName5:String = propertyInfo5.@name; // 获取DropDownList的name
if(null!=object[propertyName5]){ //获取的DropDownList对象不为空时
if((object[propertyName5].name).substring(0,12)!="DropDownList"){ //如果DropDownList指定了name属性,验证其权限
if((object[propertyName5].name).substring(0,5)=="MENU_"){ //验证是否满足权限名称格式规范
if(checkYorN(object[propertyName5].name)){ //校验权限,具备权限显示
object[propertyName5].visible=true;
object[propertyName5].includeInLayout=true;
}else{ //不具备权限影藏
object[propertyName5].visible=false;
object[propertyName5].includeInLayout=false;
}
}
}
}
}

}

/** 根据属性name来判断是否有相应的权限 */
public function checkYorN(name:String):Boolean{
for(var j:int=0;j<functionCollection.length;j++){
if(name==functionCollection.getItemAt(j).funcId){
return true;
}
}
return false;
}

/**
* 根据用户所具有的权属(ownership)过滤对应的各个业务的业务类别
* @param typeArrColl 需要过滤的数据集合
* @param matchProprety 匹配集合的属性
*/
public function filterCmbItemAuthorityByQs(typeArrColl:ArrayCollection):ArrayCollection
{
var ownerShip:String = CommonUtils.covertOwnership(userInfo.ownershop); //获取登录用户所拥有的权属并转换为名称
var result:Array = ownerShip.split(','); //转换为数组
for(var i:int=0;i<typeArrColl.length;i++){ //遍历需要过滤的数据集合
var b:Boolean=false;
if(CommonUtils.isEmptyStr(typeArrColl[i].qs)){ //过滤查询所有的项
continue;
}
for(var j:int=0;j<result.length;j++){ //遍历匹配
if(typeArrColl[i].qs == result[j]){
b = true;
break;
}else{
b = false;
}
}
if(!b){ //过滤数据
typeArrColl.removeItemAt(i);
i--;
}
}
return typeArrColl;
}

}

SingletonLoginUser的更多相关文章

随机推荐

  1. 常用的Elasticseaerch检索技巧汇总

    本篇博客是对前期工作中遇到ES坑的一些小结,顺手记录下,方便日后查阅. 0.前言 为了讲解不同类型ES检索,我们将要对包含以下类型的文档集合进行检索: . title 标题: . authors 作者 ...

  2. Elasticsearch之match_phrase小坑记录

    1.问题抛出 某个词组在Elasitcsearch中的某个document中存在,就一定通过某种匹配方式把它搜出来. 举例: title=公路局正在治理解放大道路面积水问题. 输入关键词:道路,能否搜 ...

  3. HDU - 5094 Maze(状压+bfs)

    Maze This story happened on the background of Star Trek. Spock, the deputy captain of Starship Enter ...

  4. Linux系统下使用split命令分割大文件 (转载)

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://snailwarrior.blog.51cto.com/680306/140531 ...

  5. [UE4]C++实现动态加载的问题:LoadClass()和LoadObject()

    http://aigo.iteye.com/blog/2281558 原文作者:@玄冬Wong 相关内容:C++静态加载问题:ConstructorHelpers::FClassFinder()和FO ...

  6. 51nod1100(计算斜率)

    题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1100 题意:中文题啦- 思路:算斜率不用多说吧?本题唯一一个 ...

  7. django视图 CBV 和 FBV

    目录 视图 CBV 和 FBV 什么是视图? FBV function based view 基于函数的视图 CBV class based view 基于类的视图 小技巧 CBV 如何获取页面请求类 ...

  8. 基础篇-密码文件.pgpass

    密码文件包含字段 host:port:dbname:user:password port和dbname可以使用*号作通配符 在*nix系统中 ~/.pgpass 在windows系统中 %APPDAT ...

  9. Spring IOC 的源码分析

    刚学习Spring的时候,印象最深的就是 DispatcherServlet,所谓的中央调度器,我也尝试从这个万能胶这里找到入口 configureAndRefreshWebApplicationCo ...

  10. css绘制各种形状

    代码:http://runjs.cn/code/9lyjtbxl: 效果:http://sandbox.runjs.cn/show/9lyjtbxl <!DOCTYPE html> < ...