增加论坛列表显示版主的功能

CS中本身没有专门的版主这个概念。它使用了基于角色的授权机制。我们可以使用这个机制实现版主这个功能。
例如,我有一个板块名为“灌水乐园”,为了实现版主的功能,可以按以下步骤进行:

1.  添加一个角色用于充当这个版块的版主,角色名为“灌水乐意管理员”(这里的角色名是不能随意写的,必须有一定的规范,以后会用到的)。

2.  修改此角色的默认权限,使之与“Everyone”的权限一样。这是因为新建的角色的所有权限都是受限的。

3.  将“灌水乐园管理员”这个角色添加到版块“灌水乐意”的权限映射列表中,并修改其权限,使之足以管理此版块。

4.  如果我希望用户“AA”出任版主,就为“AA”添加角色“灌水乐园管理员”。

设置某个用户为管理员就是这么几个步骤。

下面我们来看,怎么样在论坛列表中显示版主列表。示例请看牛头网论坛

为了实现此功能,我们需要进行以下几个步骤的工作:
1.  编写版主显示控件(ForumManagersView);
2.  修改Resource.xml 文件,添加需要几个需要用到的字符串资源;
3.  修改View-ForumGroupView.ascx 控件,使之能够显示版主控件;

1. 编写版主显示控件(ForumManagersView)
我的代码如下:
using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

using CommunityServer.Controls;
using CommunityServer.Components;
namespace Newtor.CS.Forums.Controls
{
    
/// <summary>
    
/// ForumManagerView 的摘要说明。
    
/// </summary>
    public class ForumManagersView : PlaceHolder
    {
        
public ForumManagersView()
        {
        }

        
protected override void OnInit(EventArgs e)
        {
            
this.PreRender +=new EventHandler(ForumManagersView_PreRender);
            
base.OnInit (e);
        }


        
#region  ForumName 属性

        
private string forumName;

        
/// <summary> 
        
/// 
        
/// </summary> 
        public string ForumName
        {
            
get
            {
                
return forumName;
            }
            
set
            {
                forumName 
= value;
            }
        }

        
#endregion



        
public void BindData()
        {
            System.Guid roleID;
            
try
            {
                Role role 
= Roles.GetRole(this.ForumName+ResourceManager.GetString("ForumManagersView_RoleName_Postfix"));
                roleID 
= role.RoleID;
            }
            
catch( CSException e )
            {
                
if( e.ExceptionType == CSExceptionType.RoleNotFound )
                    
return;
                
else
                    
throw e;
            }

            UserSet users 
= Roles.UsersInRole(0,10,SortUsersBy.LastActiveDate,SortOrder.Descending,roleID);

            
if ( !users.HasResults ) return;

            HtmlGenericControl div 
= new HtmlGenericControl("div");
            div.Controls.Clear();
            div.Controls.Add(
new LiteralControl(ResourceManager.GetString("ForumManagersView_Prefix")));

            
foreach ( User user in users.Users )
            {
                HyperLink userLink 
= new HyperLink();
                userLink.NavigateUrl 
= Globals.GetSiteUrls().UserProfile(user.UserID);
                userLink.Text 
= user.Username;
                div.Controls.Add(userLink);
                div.Controls.Add(
new LiteralControl(ResourceManager.GetString("ForumManagersView_ManagersList_Seperator")));
            }

            
if ( div.Controls.Count > 2 )
                div.Controls.RemoveAt(div.Controls.Count 
- 1 );

            
this.Controls.Clear();
            
this.Controls.Add(div);
        }

        
private void ForumManagersView_PreRender(object sender, EventArgs e)
        {
            BindData();
        }
    }
}

代码很简单,这里就不在说了。大家可以根据自己的需要更改版主列表的显示方式,我在这里用的是一个div,横向显示。

2.  修改Resource.xml 文件,添加需要几个需要用到的字符串资源
        <resource name="ForumManagersView_Prefix">版主: </resource>
        
<resource name="ForumManagersView_RoleName_Postfix">管理员</resource>
        
<resource name="ForumManagersView_ManagersList_Seperator"> , </resource>

这里就用到了角色名称后缀,这也就是为什么充当版主的角色的名称不能随便取的原因,当然,这里也可以根据自己的需要更改后缀,或者用更复杂的表达示,不过这也是没有什么必要的。

3.  修改View-ForumGroupView.ascx 控件,使之能够显示版主控件

这里就需要大家自己更加情况添加了,具体方法就不用我说了吧。我是把版主列表放在版块描述信息上面,这里要注意的就是,一定要设置一下ForumManagersView这个控件的ForumName这个参数,不然是找不到角色的。
posted on 2006-04-11 14:50  Na57  阅读(545)  评论(0编辑  收藏  举报