当前位置:编程学习 > php >>

实现简单的ACL

 

Php代码 

<?php 

/**

 * 简单的ACL 权限控制功能

 * 

 * 表定义

 * 

 * 1. 资源定义    (rsid,access,desc)

 * 2. 角色定义    (id,rolename,desc)

 * 3. 资源-角色关联(rsid,role_id)

 * 4. 用户-角色关联(user_id,role_id)

 * 

 * 依赖db.php sqlobject.php

 * 

 * @author vb2005xu.iteye.com 

 */ 

class AclBase { 

 

    /**

     * 不允许任何人访问

     */ 

    const NOBODY = 0; 

     

    /**

     * 允许任何人访问

     */ 

    const EVERYONE = 1; 

     

    /**

     * 允许 拥有角色的用户访问

     */ 

    const HAS_ROLE = 2; 

     

    /**

     * 允许 不带有角色的用户访问

     */ 

    const NO_ROLE = 3; 

 

    /**

     * 在 资源-角色关联 定义的 角色才能访问

     */ 

    const ALLOCATE_ROLES = 4; 

     

    // 定义相关的 表名 

    public $tbResources = 'aclresources'; 

    public $tbRoles = 'aclroles'; 

    public $tbRefResourcesRoles = 'aclresources_aclroles'; 

    public $tbRefUsersRoles = 'users_aclroles'; 

     

    /**

     * 格式化 资源的访问权限并返回

     * 

     * @return int

     */ 

    static function formatAccessValue($access){ 

        static $arr = array(self::NOBODY,self::EVERYONE,self::HAS_ROLE,self::NO_ROLE,self::ALLOCATE_ROLES); 

        return in_array($access,$arr) ? $access : self::NOBODY; 

    } 

     

    /**

     * 创建资源,返回资源记录主键

     * 

     * @param string $rsid

     * @param int $access

     * @param string $desc

     * 

     * @return int

     */ 

    function createResource($rsid,$access,$desc){ 

        if (emptyempty($rsid)) return false; 

         

        $resource = array( 

            'rsid' => $rsid, 

            'access' => self::formatAccessValue($access), 

            'desc' => $desc, 

            'created_at' => CURRENT_TIMESTAMP 

        ); 

         

        return SingleTableCRUD::insert($this->tbResources,$resource); 

    } 

     

    /**

     * 修改资源,返回成功状态

     * 

     * @param array $resource

     * @return int

     */ 

    function updateResource(array $resource){        

        if (!isset($resource['rsid'])) return false; 

         

        $resource['updated_at'] = CURRENT_TIMESTAMP; 

         

        return SingleTableCRUD::update($this->tbResources,$resource,'rsid'); 

    } 

     

    /**

     * 删除资源

     * 

     * @param string $rsid

     * @return int

     */ 

    function deleteResource($rsid){ 

        if (emptyempty($rsid)) return false; 

        return SingleTableCRUD::delete($this->tbResources,array('rsid'=>$rsid)); 

    } 

     

    /**

     * 创建角色,返回角色记录主键

     * 

     * @param string $rolename

     * @param string $desc

     * 

     * @return int

     */ 

    function createRole($rolename,$desc){ 

        if (emptyempty($rolename)) return false; 

         

        $role = array( 

            'rolename' => $rolename, 

            'desc' => $desc, 

            'created_at' => CURRENT_TIMESTAMP 

        ); 

         

        return SingleTableCRUD::insert($this->tbRoles,$role); 

    } 

     

    /**

     * 修改角色,返回成功状态

     * 

     * @param array $role

     * @return int

     */ 

    function updateRole(array $role){        

        if (!isset($role['id'])) return false; 

         

        if (isset($role['r

补充:Web开发 , php ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,