• php框架 生成ACL


    用php框架开发中,经常要用到acl, 手动一个一个录入控制器,动作,描述 到数据库太麻烦..

    以下代码,复制到测试控制器上, 前提是你的函数名都是规范的phpdoc格式, 如下格式:
     1     /**
     2      * 生成acl
     3      */
     4     function makeAcl(){
     5         $controller = dirname(__FILE__);
     6         $aclData = array();
     7         $needAuth = array('member', 'test'); //需要添加到数据库里的,白名单模式
     8         spClass('m_acl')->runSql('TRUNCATE TABLE  `cym_acl`');
     9         foreach(glob($controller . "\*.php") as $v){
    10             $current = file_get_contents($v);
    11             preg_match_all('/[\{\}]\s+\/\*\*\s+\*\s(.+)[\s\S]+?function (\w+)\(.*\)/', $current, $out);
    12             preg_match('/\/\*\*\s+\*\s(.+)[\s\S]+?class (\w+) /', $current, $out1);
    13             if(count($out) === 3 && count($out1) === 3){
    14                 $contrl = $out1[2];
    15                 $aclData[$contrl]['describe'] = $out1[1];
    16                 //创建控制器pid=0
    17                 $id = in_array($contrl, $needAuth) ? spClass('m_acl')->create(array('visit' => $contrl, 'describe' => $out1[1], 'pid' => 0)) : 0;
    18                 for($i = 0; $i < count($out[1]); $i++){
    19                     $aclData[$contrl][] = array('describe' => $out[1][$i], 'action' => $out[2][$i]);
    20                     //创建动作
    21                     if($id > 0){
    22                         spClass('m_acl')->create(array('visit' => $out[2][$i], 'describe' => $out[1][$i], 'pid' => $id));
    23                     }
    24                 }
    25             }
    26         }
    27         dump($aclData);
    28         exit;
    29     }
    
    

    对于动作名的控制器名都加了suffix的,只要手工改改循环体就好了,注strstr第三个函数要php 5.2以上版本才行!

    生成的是数组.

    
    
  • 相关阅读:
    一次数据库的整理的sql语句
    网页交互及xml的一些属性对程序的影响
    google编程挑战赛Round1的前两道题
    修改Windows帐户密码,导致Sql Server 2000无法启动。
    在虚拟主机中无法实现缩放等交互
    动态控件创建的一些经验
    文章
    如何解决 SQL Server 2000 中的连接问题
    待看
    I帧,P帧,B帧简介
  • 原文地址:https://www.cnblogs.com/wc1217/p/2732828.html
Copyright © 2020-2023  润新知