仿linux权限 设置内容发布平台

以下仿照linux权限算法,对内容发布平台进行设置

 /**
     * 推送平台
     *
     * 值     显示
     * 0      全部
     * 1      web平台
     * 2      android平台
     * 4      iOS平台
     *
     * 3      web+android
     * 5      web+iOS
     * 6      android+iOS
     * 7      web+android+iOS
     *
     * 仿unix权限规则,平台码按等比数列形式增加,如 1,2,4,8,16,32....
     * 两种平台的状态码相加等于的值就表示这两种平台都显示,多个平台也一样
     *
     * @return array([],[]...)
     * */
    static function platForm()
    {
        return array(
            // 推送平台码 、文字
            ['code' => '0', 'text' => '全部'],
            ['code' => '1', 'text' => '网站'],
            ['code' => '2', 'text' => '安卓'],
            ['code' => '4', 'text' => '苹果']
        );
    }

    /**
     * 获取当前任务推送的平台
     * 为后台编辑提供
     * 状态码,根据保存的platfrom的值获取任务推送的平台
     * 如:传入7,返回 array(1,2,4),表示这个任务在1,2,4 平台开启推送
     * @code int 所有平台码:如0,1,2,3,4,5,6,7
     * @return array(1,2,4...)
     */
    static function getTaskPlatForm($code = 0)
    {
        $plat = [];
        if ($code > 0) {
            $platFrom = array_reverse(self::platForm());//从大到小开始取推送的平台
            foreach ($platFrom as $k => $v) {
                if ($v['code'] == 0) break;
                if ($code&$v['code'])$plat[] = (int)$v['code']; //使用按位与运算
            }
        } else {
            $plat = [0];
        }
        return $plat;
    }

    /**
     * 获取传入状态内的所有任务对应的platfrom的值
     * 为前台筛选提供
     * 如:传入2 返回 array(0,2,3,6,7),表示数据库中platfrom 为0,2,3,7,6的都允许显示
     * @param $code int 唯一平台码:如0,1,2,4
     * @return array(2,3,7...)
     * */
    static function inTaskPlatForm($code = 0)
    {
        $plat = [];
        if ($code>0) {
            $platFrom = self::platForm();
            $plat_code = [];
            foreach ($platFrom as $v) {
                $plat_code[] = $v['code'];
            }
            $sum = array_sum($plat_code);
            $plat = [];
            for ($i = $sum; $i >= 0; $i--) {
                if ($i & $code) $plat[] = $i;
            }
        }
        $plat[]=0;
        return $plat;
    }

 

发表评论