彭斌

[ 2006,2007 ASP.NET ' MVP ]
随笔 - 99, 文章 - 5, 评论 - 1027, 引用 - 16
数据加载中……

CommunityServer 2.0中Files 与 Reader 项目的授权机制

CommunityServer 2.0 出来已经有几天了,开放了部分的源代码。其中新增加的CommunityServer.Files、CommunityServer.Reader两个项目是不开源的。并且在free版本里有一些限制。

那么CommunityServer 2.0 中是进行相关的控制呢:
借助一些工具,我们很容易查看到CommunityServer.Files、与CommunityServer.Reader 的元数据。我分别在两个类下发现了授权的方法:
CommunityServer.Files 项目对应Entries类、CommunityServer.Reader项目对应Feeds类。
在Entries类下有一个方法如下描述:
public static bool ValidateCreateEntryAccess()
        
{
            
bool flag1;
            
object obj1 = CSCache.Get("CreateEntryAccess");
            
if (obj1 != null)
            
{
                
return (bool) obj1;
            }

            
if (CommunityServer.FileGalleryLimit == 0x7fffffff)
            
{
                flag1 
= true;
            }

            
else
            
{
                
int num1 = 0;
                
foreach (Folder folder1 in Folders.GetFolders(CSContext.Current.UserID, truetruetrue))
                
{
                    num1 
+= folder1.TotalThreads;
                }

                flag1 
= num1 < CommunityServer.FileGalleryLimit;
            }

            CSCache.Insert(
"CreateEntryAccess", flag1, CSCache.HourFactor);
            
return flag1;
        }


从以上类我们可以知道 File的最大数量是0x7fffffff,这个是十六进制的表示,换算成十进制为:2147483647。
如果不是最大授权,那么就要判断所有文件夹下有多少文件,如果文件数量超过了授权的FileGalleryLimit就返回一个false。当然这种验证很有比较消耗系统资源,所有CS在这里做了一个缓存机制,缓存时间为一个小时。这里就会出现一点点小问题:也就是说,如果你在一个小时前做的一次验证如果没有超过授权的文件数量,在之后的一个小时里,你可以随意上传你想要的文件数量,而CS是不会监控的。但是过了缓存时间后,CS又会判断。嘿嘿,如果你想多上传点文件就算好那个小时,疯狂一点...

如果你超过了授权的数量,那么由什么方法处理,结果又是如何,看看下面的代码就明白:
 public static void CreateEntryAccessCheck()
        
{
            
if (!Entries.ValidateCreateEntryAccess())
            
{
                
throw new CSException(CSExceptionType.InvalidLicense, "You have exceeded the maximum number of uploads allowed by your current license.");
            }

        }
整个授权机制,就这一个入口点,如果授权没有通过,抛出一个异常:显示:You have exceeded the maximum number of uploads allowed by your current license.

CommunityServer.Reader项目的授权机制在Feeds类下,我们可以看到类似代码,如下:
public static bool ValidateUserAccess()
        
{
            
if (CommunityServer.FeedReaderLimit != 0x7fffffff)
            
{
                ArrayList list1 
= Feeds.GetUsers();
                
if (list1.Count >= CommunityServer.FeedReaderLimit)
                
{
                    
return Feeds.CheckUserInList(CSContext.Current.User, list1);
                }

            }

            
return true;
        }
首先判断是不是最大的授权值,如果不是,就Feeds.GetUsers()取得使用 Reader的所有用户,再如果使用的Reaser的人数操作了FeedReaderLimit的授权值,这个时候还需要进行一次判断,看是否当前登录的用户是Reader的使用者,如果是才会返回false。
整个授权也有一个唯一的入口:
 public static void UserAccessCheck()
        
{
            
if (!Feeds.ValidateUserAccess())
            
{
                
throw new CSException(CSExceptionType.InvalidLicense, "You have exceeded the maximum number of users allowed by your current license.");
            }

        }


如果发挥得是false,就抛出You have exceeded the maximum number of users allowed by your current license.的异常信息。

其实如何进行FeedReaderLimit与FileGalleryLimit 数量限制的,这些是在一个叫Telligent.Registration.dll 的类库下完成的,由于该类进行了混淆,所以分析起来有困难。

本次Blog着落于此,CS2.0 更多的文章我会陆续奉上。

posted on 2006-02-24 10:16 彭斌 阅读(3191) 评论(6)  编辑 收藏 网摘 所属分类: CommunityServer

评论

#1楼   回复  引用  查看    

你不如把所有代码都反编译出来,我们就好利用了!关键要核心架构的分析!
2006-02-24 18:40 | C# hack      

#2楼   回复  引用  查看    

Telligent.Registration.dll 里实现的是对Community Server的license管理。 有些内容是经过混淆的。 而且出现的字符串是unicode, 也许是变懒了, 看着看着就去做其它事情了。 :P
2006-02-24 22:14 | Stephen Leung      

#3楼   回复  引用  查看    

加油啊。最崇拜你了!
2006-02-28 17:48 | 言学      

#4楼   回复  引用    

Reader项目,好像管理员用户只能获得自已一个用户的feeds订阅条目。。而无法管理共享其他用户的订阅,,每个用户形成独立,管理员形同虚设

不知道是否是因为功能受限的原故

如无法管理,该模块只能禁用,或是自已编用数据控件来管理
2006-05-31 02:22 | wolf[未注册用户]

#5楼   回复  引用    

纠正一下以上的发言,汗。。。可以管理,,弄错了

CommunityServer.Files、CommunityServer.Reader两个项目是不开源的。并且在free版本里有一些限制

具体有什么限制???
2006-05-31 02:45 | wolf[未注册用户]

#6楼   回复  引用  查看    

这些好像都不是问题达
2006-12-19 14:18 | 我不是一只鹿      



发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 336723




相关文章:

相关链接: