zf权限问题(第二种)

zf权限问题无非就是两种情况(据我所知)

第一种:(上一篇权限问题所说的)把权限写入数据库,从数据库取出权限与acl.ini文件中的权限对比。

第二种:根据登录情况的不同,赋予当前用户不同的权限,这些权限与acl.ini文件中的权限对比。

不同点两种方法无非一个权限已写入数据库,一个权限在程序中赋予。相同点都和acl.ini文件中的权限做对比。

 

acl.ini文件中的权限处理

acl.ini文件:(如application->modules->default->configs目录下,default是模块名,模块名可更改)

[production]
*.* = admin,actived,logined

[testing : production]

[development : production]

[local : production]

[localdata : development]

处理acl.ini文件的类

Acl.php文件:(如library->Ata->Account目录下,Ata是自定义的类库名)

<?php
class Ata_Account_Acl
{
    static public function hasAcl($roles, $request){
        $ACL_FILE = APPLICATION_PATH . "/modules/{$request->getModuleName()}/configs/acl.ini";	
        if(!file_exists($ACL_FILE)) return true;	

        try{$acl = new Zend_Config_Ini($ACL_FILE, APPLICATION_ENV);	
            $acl_controller = $acl->toArray();	
        }catch(Exception $e){
            try{$acl = new Zend_Config_Ini($ACL_FILE, 'production');
                $acl_controller = $acl->toArray();
            }catch(Exception $e){return false;}
        }

        $result = false;

        foreach($acl_controller as $controller => $acl_action){
            if( '*'!=$controller && $request->getControllerName()!=$controller){continue;}

            foreach($acl_action as $action => $access){
                if( '*'!=$action && $request->getActionName()!=$action){continue;}
                $result = (boolean)count(array_intersect($roles, explode(',',$access)))>0;
            }
        }

        return $result;
    }
}

主要判断acl.ini文件中的权限是否与程序中的权限有交集,有交集就证明有权限,无交集就证明无权限。

Ata_Controller_Action.php 文件

<?php 
class Ata_Controller_Action extends Zend_Controller_Action
{
	public function preDispatch()
	{
		parent::preDispatch();
		
		$roles = array('guest');	
		if($this->user){	//如果用户登录了,$roles增加'login'
			$roles[] = 'login';
		}
		if(!Ata_Account_Acl::hasAcl($roles, $this->_request)){	//判断acl.ini文件中的权限与$roles是否有交集 没有执行noAcl()方法
			$this->noAcl();
		}
	}
	
	public function noAcl()
	{
		if(!in_array('login', $roles)){	//判断它是否登录了
			if(!$this->_request->isXmlHttpRequest()){	//判断是否是ajax请求,不是ajax请求,用session记录url

			}
			$this->doNoAcl("请先登录","/sign");	
		}		
		$this->doNoAcl('权限不足', '/');
	}
	
	public function doNoAcl($msg, $url)
	{
		if($this->_request->isXmlHttpRequest()){	//判断是否是ajax请求,不是ajax请求跳转页面,是ajax请求不跳转页面
			echo $msg;exit;
		}else{
			$this->_redirect($url);
		}
	}
}


 

<think>好的,我现在需要帮助用户解决如何下载并使用Ahy_zf.shx字体文件在AutoCAD中的问题。首先,我得仔细分析用户的查询内容,用户提到参考了引用[1],里面讲到了CAD特殊字体“Ahy_zf.shx”的使用与管理,包括安装前的准备工作,比如来源可靠、版本兼容性、备份等。用户现在的问题是如何下载这个字体并正确使用它。 首先,我需要确定用户的需求。用户可能是一位AutoCAD的使用者,遇到了需要使用Ahy_zf.shx字体的情况,但不知道如何获取和安装。我需要分步骤引导他们完成整个过程,同时确保他们了解注意事项,比如来源安全、兼容性检查和备份的重要性。 接下来,我需要思考下载的步骤。根据引用[1],合法渠道是关键,所以应该建议用户从官方网站或可信的供应商处获取。用户可能不知道哪些网站是可靠的,需要给出具体的例子,比如Autodesk App Store、CAD论坛如CADTutor,或者第三方供应商如Fonts.com。但要注意可能存在版权问题,需要提醒用户确认授权。 然后是安装步骤。AutoCAD的SHX字体通常放在Fonts文件夹中,具体路径可能因版本不同而异。需要详细说明如何找到这个文件夹,并将字体文件复制进去。安装后需要重启CAD软件,可能还需要在图纸中加载该字体,通过STYLE命令或属性面板。 另外,兼容性检查也很重要,用户需要确认他们的CAD版本是否支持.shx格式。现在新版本可能更推荐.ttf,但SHX仍然可用。如果遇到不兼容的情况,可能需要转换字体格式,或者联系供应商获取更新版本。 最后,生成相关问题需要考虑用户可能遇到的后续问题,比如安装失败、字体不显示、替代方案等,以及版权问题。这些都是用户在使用过程中可能遇到的常见问题,提前准备这些问题能帮助用户更全面地解决问题。 总结下来,回答的结构应该是先分步骤说明下载和安装方法,然后注意事项,最后相关问题。需要确保使用正确的格式,如行内数学表达式用$...$,独立公式用$$...$$,但在这个问题中可能用不上数学公式,所以重点放在步骤和代码块上。同时,引用标识要正确添加,比如在备份步骤后加上[^1]。 可能还需要验证一些信息,比如SHX字体的安装路径是否准确,不同系统是否有差异,比如Windows和Mac。但通常AutoCAD在Windows上更常见,所以可能以Windows路径为主。另外,提醒用户注意文件权限,可能需要管理员权限才能复制到Fonts文件夹。 最后,确保语言简洁明了,步骤清晰,避免使用过于专业的术语,让用户容易理解。同时,检查是否有遗漏的步骤,比如重启软件,或者如何验证字体是否安装成功,比如在CAD中查看字体列表是否存在Ahy_zf.shx。</think>### 如何下载并使用Ahy_zz.shx字体文件(AutoCAD) #### 步骤1:合法获取字体文件 1. **官方渠道**:通过Autodesk App Store、CAD插件供应商(如CAD Blocks Free)或字体设计公司(如Linotype)购买/下载[^1]。 2. **可信平台**:访问CAD资源网站(如CADTutor论坛、Cadalyst)搜索字体文件时,需验证文件来源的合法性。 3. **避免风险**:切勿从非信任网站下载.shx文件,可能包含恶意代码或格式错误。 #### 步骤2:安装字体到AutoCAD 1. **定位字体文件夹**: - AutoCAD默认SHX字体路径为: ``` C:\Program Files\Autodesk\AutoCAD 20XX\Fonts ``` 其中`20XX`为软件版本(如2023)。 - 直接复制`Ahy_zf.shx`文件到此目录。 2. **重启AutoCAD**:使软件重新加载字体库。 3. **加载字体**: - 在图纸中输入命令`STYLE` → 新建或修改文字样式 → 选择`Ahy_zf.shx`作为字体。 #### 步骤3:验证兼容性 - 若AutoCAD提示“字体未找到”,需检查: 1. 文件是否损坏(重新下载并替换)。 2. CAD版本是否支持.shx(旧版默认支持,新版需在选项`FONTALT`中指定替代字体)。 #### 注意事项 1. **版权问题**:商用场景需确认字体许可证范围,避免侵权。 2. **备份原始字体**:修改前备份`Fonts`文件夹,防止系统崩溃。 ```text 示例路径(Windows系统): AutoCAD安装目录 → Support → Fonts → 粘贴Ahy_zf.shx ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值