reachall - 2024/8/6 15:03:05
最初的想法是某个栏目下,非登录用户只能看标题,但不能看详细内容。
一开始安装的PA版本是没有设置栏目组权限的功能的,后来升级了新版本后有这功能了,那就利用勾选会员组来限制某个栏目的阅读权限的:




但这样有个问题,就是整个栏目内的具体条目内容根本看不到,屏幕上是空白的,提示要登陆后才能访问。
因为设想是要能看到list,但不能看到具体内容。
后来看了一遍官网的“帮助”文件,翻了一遍本论坛的内容,总算通过修改该栏目的模板解决了。
reachall - 2024/8/6 15:09:28
凑合的解决办法是 :
为这个栏目专门在Templates的目录里的views专门建一个文件夹,把要参考的Detail.cshtml拷贝进来,对这个模板进行修改,然后要限制观看栏目的内容就调用这个模板就可以。
官网上参考的网页是
https://www.pageadmin.net/help/113.cshtml
reachall - 2024/8/6 15:10:35
@{
var infoData=Html.InfoData();
int infoId =Html.CurrentInfoId();
int columnId=infoData.ColumnId;
//参数3和参数4分别为sql条件和sql参数
var prevData=Html.InfoDataPrevious(columnId,infoId,"columnId=@columnId",new{columnId=columnId});
var nextData=Html.InfoDataNext(columnId,infoId,"columnId=@columnId",new{columnId=columnId});
}
@{
CurrentUser currentUser=ViewBag.CurrentUser; //获取当前登录用户
int uid=currentUser.Uid; //获取用户Id,未登录uid为0
string userName=currentUser.UserName;//获取用户名
}
<div class="container padding-top-20">
<div class="row">
<div class="col-md-3">
@Html.Partial("subNavPartial")
</div>
<div class="col-md-9">
@Html.Partial("BreadcrumbPartial")
<div class="info-content">
<h4 class="text-center line-height-3">@infoData.Title</h4>
<div class="text-center">
<span title="发布时间" class="margin-right-20"><i class="fa fa-clock-o"></i> @infoData.Thedate.ToString("yyyy-MM-dd")</span>
<span title="点击数"><i class="fa fa-eye"></i> <span id="lb_clicks">0</span></span>
</div>
@{
if (uid == 0)
{
//未登录的逻辑
<div><br><a href="/member/login/"> <font color='blue'><center><u>已注册用户请登录后阅读受限内容</u></center></font></a> <br><center>
<a href="/member/reg/"> <font color='blue'><u>未注册者请注册新用户登陆后阅读</u></font></a></center> </div>
}
else
{
//已经登录的逻辑
<div><center>欢迎您,@currentUser.UserName !</center> @Html.Raw(infoData.Content)</div>
}
}
<div class="info-content padding-top-20" id="Content">
</div>
</div>
<div class="clearfix padding-top-20 line-height-2">
<ul>
@if (prevData != null)
{
string url = Html.InfoDataUrl((int)prevData.ColumnId, (int)prevData.Id);
<li class="text-gray">上一篇:<a href="@url">@prevData.Title</a></li>
}
@if (nextData != null)
{
string url = Html.InfoDataUrl((int)nextData.ColumnId, (int)nextData.Id);
<li class="text-gray">下一篇:<a href="@url">@nextData.Title</a></li>
}
</ul>
</div>
</div>
</div>
</div>
<script type="text/javascript">
var $lb_clicks = $("#lb_clicks");
$.post("/E/InfoData/AddClicks", { ColumnId:@infoData.ColumnId,Id:@infoData.Id}, function (data) { $lb_clicks.text(data)})
</script>
reachall - 2024/8/8 19:07:51
上面那个是判断是否为注册登陆的用户,如果是的话,可以阅读栏目文章的内容,如果不是的话,转去登陆或者新用户注册。
reachall - 2024/8/8 19:10:14
下午又修改了一种新模式,就是判断是否是某个特定用户组的成员,如果是的话可以阅读相应栏目文章的内容,如果不是则显示无权限。对应判断的代码如下:
@{
CurrentUser currentUser = ViewBag.CurrentUser; // 获取当前登录用户
int memberGroupId = currentUser.MemberGroupId; // 尝试获取用户所属的memberGroupId
int targetMemberGroupId = 6; // 假设你要允许阅读栏目内容的目标memberGroupId是6,这个值在后台用户设置里面可以查询到设置的用户组相应的Id。
// 显示信息内容的条件改为判断memberGroupId
if (memberGroupId == targetMemberGroupId)
{
// 用户属于指定的memberGroupId,显示信息内容
<div><center>欢迎您,@currentUser.UserName !</center> @Html.Raw(infoData.Content)</div>
}
else
{
// 用户不属于指定的memberGroupId,显示错误信息或引导用户进行相应操作
<div><br><a href="/member/"> <font color='blue'><center><u>您没有权限查看此内容,仅供公司在职员工登陆后查阅</u></center></font></a></div>
}
}
wzg688 - 2024/8/10 17:07:20
厉害,辛苦了,感谢分享!