AspNetForums中对于用户权限,是类似于Windows系统采用基于角色(Role)的权限控制,这样,我们就可以根据需要,设定不同的角色,设置各个角色的权限,并将各个用户属于不同的角色。根据用户所属的角色,来判断用户可以有哪些权限,进行哪些操作。
先看看数据库设计:
forums_Users表,用户表,UserID为主键,唯一确定一个用户
forums_Roles表,角色表,RoleID为主键,唯一确定一个角色
forums_UsersInRoles表,用户和角色对应关系表,存储用户所在的角色
forums_ForumPermissions表,角色在某版块的权限,记录了在每个版块中各个角色可以有权限进行哪些操作
再看看是如何来判断用户操作权限的:
当用户登录后,要获取论坛所有版块的信息并缓存,在获取版块信息的同时,要获取当前用户在每个版块操作(如发表新帖、投票、附件等)的权限。操作权限有三种:"有权限"、"无权限"和"未设置",如果是未设置,那么就看这个操作的默认权限是什么。一个用户可以属于多个角色,每个角色对应的操作权限不一样,要判断这个用户有没有当前操作的权限,则遍历这个用户所属的所有角色,如果任一角色有权限,那么该用户就有该操作的权限。具体实现请参考源码:
Components/Forums.cs中的GetForums(ForumContext forumContext, int userID, bool ignorePermissions, bool cacheable)方法和Components/Provider/ForumsDataProvider.cs中PopulateForumPermissionRightFromIDataReader方法。
角色和web.config的结合:
Asp.Net有一个功能就是可以用于控制对 URL 资源的客户端访问(可参考QuickStart上的说明)。它对于用于生成请求的 HTTP 方法(GET 或 POST)是可配置的,并且可被配置为允许或拒绝访问用户组或角色组。这个方法也被应用到AspNetForums中,例如在admin目录(管理员操作相关页面)和Moderate目录(版主操作相关页面)下都有一个web.config目录,通过web.config,可以设定其所在目录的URL客户端访问权限。
以Admin目录下的web.config中的配置为例:
<authorization>
<allow roles="Global Administrators" />
<allow roles="Site Administrators" />
<deny users="*" />
</authorization>
这个表示对于属于Global Administrators角色和Site Administrators角色授权,其他任何用户都禁止访问该目录下的页面。因为对于部分页面,希望版主也可以进行访问,那么可以增加如下配置:
<location path="ForumAdmin.aspx">
<system.web>
<authorization>
<allow roles="Global Administrators" />
<allow roles="Site Administrators" />
<allow roles="Global Moderators" />
<allow roles="Site Moderators" />
<deny users="?" />
</authorization>
</system.web>
</location>
这样,对于/Admin/ForumAdmin.aspx这个URL,属于Global Moderators或Site Moderators角色的用户也可以有权访问。
怎么设置登录用户的角色?
具体实现请参考源码:Components/Roles.cs 和文章《如何使用 Forms 身份验证创建 GenericPrincipal 对象》
附:CnForums源码下载
转载于http://blog.joycode.com/dotey/archive/2005/02/24/44791.aspx
分享到:
相关推荐
DotNet 源代码,纯英文的 Vs2003
ASP.NET Forums Alpha Release Notes Please refer to these release notes before and after installing the ASP.NET Forums preview.
"ChinaMVP论坛 v1.3" 是一个基于ASP.NET技术开发的中文论坛社区软件,它是AspNetForums的汉化和改进版本。这个版本旨在提供一个适合中国用户的在线交流平台,便于用户讨论各种IT相关的话题,分享技术知识,以及进行...
更新说明: 注册/登录/发贴验证码 图片水印 重构DataProvider模型 发帖增加CuteEditor编辑器支持 修复首页最下面的用户IP和位置信息BUG 用户操作消息通知 多选删除回复贴子 ...私人消息分页 私人消息加密
标题 "个人网站(.net 2.0+access)" 提及的是一个基于 .NET Framework 2.0 和 Access 数据库构建的个人网站项目。这个网站包含多种功能,如音乐播放、电影展示、个人相册的上传与下载,以及论坛交流。让我们详细...
AspNetForums 的汉化版和改写版,主要改写在于: 1、修改了邮件发送程序,设计了可发送需要身份验证的邮件发送组件。 2、设计了一个统一用户群组件(OneUsers.dll),只要你使用 OneUsers 的用户群(数据库可以使用...
- **AspNetForums**:一个基于ASP.NET的论坛系统,采用了Provider模型来支持多种数据库类型。 - **Asp.Net2.0**:内置了Provider模型,使得开发人员能够轻松地构建支持多种数据源的应用程序。 - **DotNetNuke**:一...