您的位置:知识库 » .NET技术

WM有约II(六):分级限制

作者: Allen Lee  来源: 博客园  发布时间: 2009-04-28 14:57  阅读: 2956 次  推荐: 0   原文链接   [收藏]  

等级制度

  在上一集里,我们把发送查询短信息的人分为"联系人"和"陌生人"两大类,应用程序会自动回复"联系人",忽略"陌生人",在这一集里,我们将会引入另外两种类型:"白名单"和"黑名单"。如果你看过上一集,你应该知道"联系人"和"陌生人"是互斥的,它们之间的区别是手机号码是否存在联系人里。"白名单"和"黑名单"是在"联系人"上发展出来的两个细分类型,它们也是互斥的,"白名单"允许执行所有查询,而"黑名单"则禁止执行所有查询。至于"陌生人",我们将会给它一个"注册"的机会,让它可以请求把自己加到联系人里。这四个等级将会通过AccessLevel枚举来表达:

代码 1

  在这一集里,我们将会在这个"等级制度"的基础上实现如下效果:

访问级别

允许执行的操作

Whitelist

PingStatus、PingSchedule

Contact

PingStatus

Stranger

SignUp

Blacklist

N/A

 

白名单 & 黑名单

  因为白名单和黑名单本质上只是两组姓名,所以我们选择最简单的文本文件来存储,每行一条记录。白名单和黑名单的管理分别由WhitelistManager和BlacklistManager来负责:

图 1

而读/写文本文件的任务则交给ReadAllLines和WriteAllLines两个方法:

代码 2

  因为白名单和黑名单是互斥的,所以当我们向任一名单添加一个姓名时,必须确保该姓名不会出现在另一个名单里,比如说,当我们向白名单添加一个姓名时,如果该姓名已包含在黑名单里,则应先从黑名单删除该姓名,由于我们使用了BindingList,于是检查工作可以在ListChanged事件触发时展开:

代码 3

  接着,我们需要两个窗体来编辑白名单和黑名单:

图 2

  是不是觉得这两个窗体很眼熟?事实上,它们仿照了Status Texts Editor(参见《WM有约II(二):持续改进》的图1)的做法,所以这里就不详述了。

  最后,我们需要在主窗体放置两个菜单项,以便打开Whitelist Editor和Blacklist Editor:

图 3

  现在,我们来看看运行效果,一开始,白名单和黑名单都是空的,我们打开Whitelist Editor,单击Add按钮:

图 4

  单击TextBox右边的"..."按钮,ChooseContactDialog对话框将会打开:

图 5

  选中一个联系人,ChooseContactDialog对话框将会关闭,选中的联系人的姓名将会出现在Whitelist Editor下面的TextBox里:

图 6

  单击OK把该姓名添加到白名单里,重复上面步骤添加另一个联系人:

图 7

  单击Whitelist Editor右上角的OK按钮关闭窗体并保存白名单。接着,打开Blacklist Editor,参照上面的步骤把Allen Lee添加到黑名单:

图 8

  由于白名单和黑名单是互斥的,此时白名单应该没有Allen Lee了,打开Whitelist Editor验证一下:

图 9

0
0
标签:Mobile

.NET技术热门文章

    .NET技术最新文章

      最新新闻

        热门新闻