Initial project files: BESCMS full source

This commit is contained in:
bes
2026-08-13 23:37:46 +08:00
parent fa6cddb540
commit 2e26f85723
2166 changed files with 396625 additions and 0 deletions
+139
View File
@@ -0,0 +1,139 @@
<?php namespace Phpcmf\Model\Cms;
/**
* 内容权限(站点 / 模块 / 栏目)
* 调用:\Phpcmf\Service::M('member_auth', 'cms')
*/
class Member_auth extends \Phpcmf\Model {
public $auth;
public $auth_type;
public $is_category_public;
public function __construct() {
parent::__construct();
$this->_reload_auth();
}
// 每次从会员缓存重新读取,避免单例构造过早导致 auth 为空
protected function _reload_auth() {
$this->auth = isset(\Phpcmf\Service::C()->member_cache['auth2'][SITE_ID])
? \Phpcmf\Service::C()->member_cache['auth2'][SITE_ID] : [];
$auth_type = \Phpcmf\Service::C()->member_cache['auth_type'] ?? 0;
// [] / null / "" 都按全局 0 处理(dr_string2array("0") 会得到 []
$this->auth_type = is_numeric($auth_type) ? intval($auth_type) : 0;
}
// 当前登录会员的权限标识
protected function _get_groupid($member) {
$auth_type = is_numeric($this->auth_type) ? intval($this->auth_type) : 0;
if ($auth_type == 1) {
$groupid = $member && !empty($member['groupid']) ? $member['groupid'] : [0];
} elseif ($auth_type == 2) {
$groupid = $member && !empty($member['authid']) ? $member['authid'] : [0];
} else {
$groupid = ['public'];
}
if (!is_array($groupid)) {
$groupid = [$groupid];
}
return $groupid ? array_values($groupid) : [0];
}
// 取某一 aid 下的栏目权限配置
protected function _category_auth_row($gid, $module, $catid) {
$mid = isset($module['dirname']) ? $module['dirname'] : '';
if (!$mid && defined('APP_DIR')) {
$mid = APP_DIR;
}
if (!empty($module['share'])) {
if (!empty($this->auth[$gid]['home']['is_category'])) {
$this->is_category_public = 0;
return isset($this->auth[$gid]['share_category'][$catid])
? $this->auth[$gid]['share_category'][$catid] : [];
}
$this->is_category_public = 1;
return isset($this->auth[$gid]['share_category_public'])
? $this->auth[$gid]['share_category_public'] : [];
}
if (!empty($this->auth[$gid]['module'][$mid]['is_category'])) {
$this->is_category_public = 0;
return isset($this->auth[$gid]['category'][$mid][$catid])
? $this->auth[$gid]['category'][$mid][$catid] : [];
}
$this->is_category_public = 1;
return isset($this->auth[$gid]['category_public'][$mid])
? $this->auth[$gid]['category_public'][$mid] : [];
}
// 站点权限
public function home_auth($name, $member = []) {
$this->_reload_auth();
$values = [];
foreach ($this->_get_groupid($member) as $gid) {
if (isset($this->auth[$gid]['home'][$name])) {
$values[] = $this->auth[$gid]['home'][$name];
}
}
return $values ? max($values) : null;
}
// 模块权限
public function module_auth($mid, $name, $member = []) {
$this->_reload_auth();
$values = [];
foreach ($this->_get_groupid($member) as $gid) {
if (isset($this->auth[$gid]['module'][$mid][$name])) {
$values[] = $this->auth[$gid]['module'][$mid][$name];
}
}
return $values ? max($values) : null;
}
// 栏目权限
public function category_auth($module, $catid, $name, $member = []) {
$this->_reload_auth();
$values = [];
$this->is_category_public = 0;
$groupid = $this->_get_groupid($member);
$has_config = false;
foreach ($groupid as $gid) {
$auth = $this->_category_auth_row($gid, $module, $catid);
if ($auth) {
// 本组已有栏目权限配置:未勾选的项视为关闭,不能再回退 public
$has_config = true;
if (isset($auth[$name])) {
$values[] = $auth[$name];
}
} elseif ($name === 'show') {
$values[] = 1; // 默认没勾选时访问开放
}
}
// 按用户组/等级时,仅当本组完全没有栏目权限配置,才回退 public
if (!$has_config && !$values && !in_array('public', $groupid, true) && isset($this->auth['public'])) {
$auth = $this->_category_auth_row('public', $module, $catid);
if (isset($auth[$name])) {
$values[] = $auth[$name];
} elseif (!$auth && $name === 'show') {
$values[] = 1;
}
}
return $values ? max($values) : null;
}
}