织梦cms栏目访问权限

栏目访问权限概述

织梦CMS支持为栏目设置访问权限控制,可以限制特定栏目的访问需要登录、需要会员等级、需要积分或需要金币才能浏览。这对于VIP内容区、付费阅读、内部资料等场景非常实用。

一、栏目级权限设置

在栏目管理中设置访问权限:

  1. 进入 核心 > 栏目管理
  2. 点击目标栏目的"更改"
  3. 找到"栏目权限"相关设置:
访问权限:
  □ 开放浏览(所有用户可访问)
  □ 限制浏览(仅限特定等级以上会员)
  
会员等级限制:
  □ 普通会员
  □ 中级会员
  □ 高级会员
  
消费限制:
  □ 免费
  □ 消耗积分:XX分
  □ 消耗金币:XX个

二、文章级权限设置

单篇文章也可以设置独立的访问权限,优先级高于栏目级设置:

阅读权限:  0=开放 / 10=普通会员 / 50=中级会员 / 100=高级会员
金币消费:  设置阅读该文章需要消耗的金币数量
积分限制:  设置阅读该文章所需的最低积分

三、模板中判断权限并显示

在栏目模板中根据用户权限显示不同内容:

<!-- 判断用户是否登录 -->
{dede:php}
if($cfg_ml->IsLogin()){
    // 已登录,显示完整内容
    echo '欢迎回来,'.$cfg_ml->M_UserName;
} else {
    // 未登录,显示提示
    echo '<div class="login-tip">请<a href="/member/login.php">登录</a>后查看</div>';
}
{/dede:php}

<!-- 判断会员等级 -->
{dede:php}
$rank=$cfg_ml->M_MbRank;
if($rank >=50){ // 中级会员以上
    // 显示VIP内容
} else {
    echo '<div class="vip-tip">您当前等级不足,需中级会员以上才能查看</div>';
}
{/dede:php}

四、栏目列表页的权限过滤

<!-- 按权限过滤显示文章 -->
{dede:php}
$memberRank=isset($cfg_ml->M_MbRank) ? $cfg_ml->M_MbRank : 0;
// 根据会员等级设置可查看的文章权限范围
$arcrank=$memberRank >=100 ? 100 : ($memberRank >=50 ? 50 : 0);
{/dede:php}

{dede:list pagesize='20' orderby='pubdate'}
[field:array runphp='yes']
if($memberRank < @me['arcrank']){
    @me='<div class="locked-item">
      <span class="lock-icon">??</span>
      <h3>'.@me['title'].'</h3>
      <p class="tip">需要更高等级才能查看</p>
    </div>';
} else {
    @me='<a href="'.@me['arcurl'].'">'.@me['title'].'</a>';
}
[/field:array]
{/dede:list}

五、未登录用户跳转登录页

在栏目模板头部添加判断代码:

<!-- 栏目模板头部 -->
{dede:php}
$needLogin=1; // 1=需要登录 0=不需要
if($needLogin && !$cfg_ml->IsLogin()){
    header('Location: /member/login.php?goto='.urlencode(GetCurUrl()));
    exit();
}
{/dede:php}

六、付费阅读栏目实现

<!-- 文章内容页判断是否已购买 -->
{dede:php}
$aid=$refObj->Fields['id'];
$arcrank=$refObj->Fields['arcrank'];

// 检查用户是否已购买该文章
$hasPaid=false;
if($cfg_ml->IsLogin()){
    $uid=$cfg_ml->M_ID;
    $check=$dsql->GetOne("SELECT id FROM dede_member_buys 
                            WHERE mid={$uid} AND aid={$aid}");
    if($check) $hasPaid=true;
}

if($arcrank > 0 && !$hasPaid){
    // 显示摘要和购买按钮
    echo '<div class="paywall">';
    echo '<p>本文为付费内容,需要支付10金币</p>';
    echo '<a href="/member/buy.php?aid='.$aid.'">立即购买</a>';
    echo '</div>';
}
{/dede:php}
权限设置建议:栏目权限应遵循"由松到紧"的原则。先对所有用户开放,再逐步对特定栏目加权限。定期检查权限设置是否合理,避免因权限过严导致内容无法被搜索引擎收录(搜索引擎无法模拟登录)。