﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-堂吉诃德-随笔分类-需求分析</title><link>http://www.cppblog.com/tdweng/category/14755.html</link><description /><language>zh-cn</language><lastBuildDate>Wed, 27 Oct 2010 09:39:09 GMT</lastBuildDate><pubDate>Wed, 27 Oct 2010 09:39:09 GMT</pubDate><ttl>60</ttl><item><title>C、C++、MFC宏</title><link>http://www.cppblog.com/tdweng/archive/2010/10/26/131315.html</link><dc:creator>心羽</dc:creator><author>心羽</author><pubDate>Tue, 26 Oct 2010 04:00:00 GMT</pubDate><guid>http://www.cppblog.com/tdweng/archive/2010/10/26/131315.html</guid><wfw:comment>http://www.cppblog.com/tdweng/comments/131315.html</wfw:comment><comments>http://www.cppblog.com/tdweng/archive/2010/10/26/131315.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tdweng/comments/commentRss/131315.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tdweng/services/trackbacks/131315.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: C宏定义的简单总结 今天在网上突然发现了下面几个关于c代码中的宏定义的说明，回想下，好像在系统的代码中也见过这些零散的定义，但没有注意，看到别人总结了下，发现果然很有用，虽然不知有的道可用与否，但也不失为一种手段，所以就先把它摘抄下来，增加一点见识：1,防止一个头文件被重复包含 #ifndef BODYDEF_H #define BODYDEF_H &nbsp; //头文件内容 #endif ...&nbsp;&nbsp;<a href='http://www.cppblog.com/tdweng/archive/2010/10/26/131315.html'>阅读全文</a><img src ="http://www.cppblog.com/tdweng/aggbug/131315.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tdweng/" target="_blank">心羽</a> 2010-10-26 12:00 <a href="http://www.cppblog.com/tdweng/archive/2010/10/26/131315.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>通用权限管理系统设计篇（三）——概要设计说明书 （转）</title><link>http://www.cppblog.com/tdweng/archive/2010/08/27/124928.html</link><dc:creator>心羽</dc:creator><author>心羽</author><pubDate>Fri, 27 Aug 2010 03:42:00 GMT</pubDate><guid>http://www.cppblog.com/tdweng/archive/2010/08/27/124928.html</guid><wfw:comment>http://www.cppblog.com/tdweng/comments/124928.html</wfw:comment><comments>http://www.cppblog.com/tdweng/archive/2010/08/27/124928.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tdweng/comments/commentRss/124928.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tdweng/services/trackbacks/124928.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp; 在前两篇文章中，不少朋友对我的设计提出了异议，认为过于复杂，当然在实际的各种系统的权限管理模块中，并不像这里设计得那么复杂，我以前所做的系统中，由只有用户和权限的，有只有用户、权限和角色的，还有一个系统用到了用户、权限、角色、组概念，这个系统是我在思考以前所做系统的权限管理部分中找到的一些共性而想到的一个设计方案，当然还会有不少设计不到位的地方，在设计开发过程中会慢慢改进...&nbsp;&nbsp;<a href='http://www.cppblog.com/tdweng/archive/2010/08/27/124928.html'>阅读全文</a><img src ="http://www.cppblog.com/tdweng/aggbug/124928.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tdweng/" target="_blank">心羽</a> 2010-08-27 11:42 <a href="http://www.cppblog.com/tdweng/archive/2010/08/27/124928.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>通用权限管理设计篇（二）——数据库设计（转）</title><link>http://www.cppblog.com/tdweng/archive/2010/08/27/124927.html</link><dc:creator>心羽</dc:creator><author>心羽</author><pubDate>Fri, 27 Aug 2010 03:40:00 GMT</pubDate><guid>http://www.cppblog.com/tdweng/archive/2010/08/27/124927.html</guid><wfw:comment>http://www.cppblog.com/tdweng/comments/124927.html</wfw:comment><comments>http://www.cppblog.com/tdweng/archive/2010/08/27/124927.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tdweng/comments/commentRss/124927.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tdweng/services/trackbacks/124927.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 国庆前整的通用权限设计的数据库初步设计部分，现在贴上来。理清了对象关系之后，让我们接着来进行数据库的设计。在数据库建模时，对于N对N的关系，一般需要加入一个关联表来表示关联的两者的关系。初步估计一下，本系统至少需要十张表，分别为：权限表、用户表、角色表、组表、用户权限关联表、用户角色关联表、角色权限关联表、组权限关联表、组角色关联表、用户属组关联表。当然还可能引出一些相关的表。下面让我们在Po...&nbsp;&nbsp;<a href='http://www.cppblog.com/tdweng/archive/2010/08/27/124927.html'>阅读全文</a><img src ="http://www.cppblog.com/tdweng/aggbug/124927.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tdweng/" target="_blank">心羽</a> 2010-08-27 11:40 <a href="http://www.cppblog.com/tdweng/archive/2010/08/27/124927.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>通用权限管理设计篇（一）（转）</title><link>http://www.cppblog.com/tdweng/archive/2010/08/27/124925.html</link><dc:creator>心羽</dc:creator><author>心羽</author><pubDate>Fri, 27 Aug 2010 03:38:00 GMT</pubDate><guid>http://www.cppblog.com/tdweng/archive/2010/08/27/124925.html</guid><wfw:comment>http://www.cppblog.com/tdweng/comments/124925.html</wfw:comment><comments>http://www.cppblog.com/tdweng/archive/2010/08/27/124925.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tdweng/comments/commentRss/124925.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tdweng/services/trackbacks/124925.html</trackback:ping><description><![CDATA[<div class=postTitle><a id=viewpost1_TitleUrl class=postTitle2 href="http://www.blogjava.net/amigoxie/archive/2007/09/29/149509.html"><font color=#6faf30>通用权限管理设计篇（一）</font></a> </div>
&nbsp;<strong><span style="FONT-FAMILY: 宋体">一．引言</span></strong>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="FONT-FAMILY: 宋体">因为做过的一些系统的权限管理的功能虽然在逐步完善，但总有些不尽人意的地方，总想抽个时间来更好的思考一下权限系统的设计。</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="FONT-FAMILY: 宋体">权限系统一直以来是我们应用系统不可缺少的一个部分，若每个应用系统都重新对系统的权限进行设计，以满足不同系统用户的需求，将会浪费我们不少宝贵时间，所以花时间来设计一个相对通用的权限系统是很有意义的。</span></p>
<p><strong><span style="FONT-FAMILY: 宋体">二．设计目标</span></strong></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="FONT-FAMILY: 宋体">设计一个灵活、通用、方便的权限管理系统。</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="FONT-FAMILY: 宋体">在这个系统中，我们需要对系统的所有资源进行权限控制，那么系统中的资源包括哪些呢？我们可以把这些资源简单概括为<strong>静态资源</strong>（功能操作、数据列）和<strong>动态资源</strong>（数据），也分别称为<strong>对象资源</strong>和<strong>数据资源</strong>，后者是我们在系统设计与实现中的叫法。</span></p>
<p style="TEXT-INDENT: 17.95pt"><span style="FONT-FAMILY: 宋体">系统的目标就是对应用系统的所有对象资源和数据资源进行权限控制，比如应用系统的功能菜单、各个界面的按钮、数据显示的列以及各种行级数据进行权限的操控。</span></p>
<p><strong><span style="FONT-FAMILY: 宋体">三．相关对象及其关系</span></strong></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="FONT-FAMILY: 宋体">大概理清了一下权限系统的相关概念，如下所示：</span></p>
<p style="TEXT-INDENT: -18pt; MARGIN-LEFT: 18pt; tab-stops: list 18.0pt"><strong>1.<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></strong><strong><span style="FONT-FAMILY: 宋体">权限</span></strong></p>
<p style="MARGIN-LEFT: 18pt"><span style="FONT-FAMILY: 宋体">系统的所有权限信息。权限具有上下级关系，是一个树状的结构。下面来看一个例子</span></p>
<p style="MARGIN-LEFT: 18pt"><span style="FONT-FAMILY: 宋体">系统管理</span></p>
<p style="MARGIN-LEFT: 18pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="FONT-FAMILY: 宋体">用户管理</span></p>
<p style="MARGIN-LEFT: 18pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="FONT-FAMILY: 宋体">查看用户</span></p>
<p style="MARGIN-LEFT: 18pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="FONT-FAMILY: 宋体">新增用户</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="FONT-FAMILY: 宋体">修改用户</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="FONT-FAMILY: 宋体">删除用户</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="FONT-FAMILY: 宋体">对于上面的每个权限，又存在两种情况，一个是只是可访问，另一种是可授权，例如对于&#8220;查看用户&#8221;这个权限，如果用户只被授予&#8220;可访问&#8221;，那么他就不能将他所具有的这个权限分配给其他人。</span></p>
<p style="TEXT-INDENT: -18pt; MARGIN-LEFT: 18pt; tab-stops: list 18.0pt"><strong>2.<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></strong><strong><span style="FONT-FAMILY: 宋体">用户</span></strong></p>
<p style="TEXT-INDENT: 18pt"><span style="FONT-FAMILY: 宋体">应用系统的具体操作者，用户可以自己拥有权限信息，可以归属于</span>0<span style="FONT-FAMILY: 宋体">～</span>n<span style="FONT-FAMILY: 宋体">个角色，可属于</span>0<span style="FONT-FAMILY: 宋体">～</span>n<span style="FONT-FAMILY: 宋体">个组。他的权限集是自身具有的权限、所属的各角色具有的权限、所属的各组具有的权限的合集。它与权限、角色、组之间的关系都是</span>n<span style="FONT-FAMILY: 宋体">对</span>n<span style="FONT-FAMILY: 宋体">的关系。</span></p>
<p style="TEXT-INDENT: -18pt; MARGIN-LEFT: 18pt; tab-stops: list 18.0pt"><strong>3.<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></strong><strong><span style="FONT-FAMILY: 宋体">角色</span></strong></p>
<p style="TEXT-INDENT: 18pt"><span style="FONT-FAMILY: 宋体">为了对许多拥有相似权限的用户进行分类管理，定义了角色的概念，例如系统管理员、管理员、用户、访客等角色。角色具有上下级关系，可以形成树状视图，父级角色的权限是自身及它的所有子角色的权限的综合。父级角色的用户、父级角色的组同理可推。</span></p>
<p style="TEXT-INDENT: -18pt; MARGIN-LEFT: 18pt; tab-stops: list 18.0pt"><strong>4.<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></strong><strong><span style="FONT-FAMILY: 宋体">组</span></strong></p>
<p style="TEXT-INDENT: 18pt"><span style="FONT-FAMILY: 宋体">为了更好地管理用户，对用户进行分组归类，简称为用户分组。组也具有上下级关系，可以形成树状视图。在实际情况中，我们知道，组也可以具有自己的角色信息、权限信息。这让我想到我们的</span>QQ<span style="FONT-FAMILY: 宋体">用户群，一个群可以有多个用户，一个用户也可以加入多个群。每个群具有自己的权限信息。例如查看群共享。</span>QQ<span style="FONT-FAMILY: 宋体">群也可以具有自己的角色信息，例如普通群、高级群等。</span></p>
<span style="FONT-FAMILY: 宋体; FONT-SIZE: 10.5pt">针对上面提出的四种类型的对象，让我们通过图来看看他们之间的关系。<br><img border=0 alt="" src="http://www.blogjava.net/images/blogjava_net/amigoxie/21128/r_%e6%9d%83%e9%99%90%e7%ae%a1%e7%90%86%e5%af%b9%e8%b1%a1%e5%9b%be.jpg" width=555 height=384><br>&nbsp;
<p><span style="FONT-FAMILY: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;有上图中可以看出，这四者的关系很复杂，而实际的情况比这个图还要复杂，权限、角色、组都具有上下级关系，权限管理是应用系统中比较棘手的问题，要设计一个通用的权限管理系统，工作量也着实不小。</span></p>
<p style="TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体">当然对于有些项目，权限问题并不是那么复杂。有的只需要牵涉到权限和用户两种类型的对象，只需要给用户分配权限即可。</span></p>
<p style="TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体">在另一些情况中，引入了角色对象，例如基于角色的权限系统，</span> <span style="FONT-FAMILY: 宋体">只需要给角色分配权限，用户都隶属于角色，不需要单独为用户分配角色信息。</span></p>
<p style="TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体">在下一篇中，我们将讲述权限管理的数据库设计等内容。<br>&nbsp;&nbsp;&nbsp;&nbsp;欢迎各位拍砖或给出宝贵意见。<br><br>&nbsp;&nbsp;&nbsp; 参考文章：<a href="http://www.blogjava.net/RongHao/category/4426.html"><a id=viewpost1_TitleUrl class=postTitle2 href="http://www.cnblogs.com/yukaizhao/archive/2007/04/15/user_role_action_permission.html"><font color=#638f27>应用程序权限设计</font></a><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://www.blogjava.net/RongHao/category/20773.html"><u><font color=#638f27>心情小站——权限相关<br></font></u></a></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></p>
</span>
<img src ="http://www.cppblog.com/tdweng/aggbug/124925.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tdweng/" target="_blank">心羽</a> 2010-08-27 11:38 <a href="http://www.cppblog.com/tdweng/archive/2010/08/27/124925.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>