Sunday, September 14, 2008

今日中秋

今日中秋,恰逢周日。第一次实行传统节日放假,但是北大却不管你,因为逢周日。
中秋,应该是团员的日子。我已经有好多年没有和父母一起过中秋了,本来今年是打算让父母过了中秋之后再回家,可是他们还是赶着在奥运前就回去了,因此我又只能一个人“独在异乡为异客”。记得原来过中秋的之后又两件事情很重要,一个是要吃月饼。很久之前的月饼那时还是觉得很好吃的,不知道怎么回事儿近年来觉得这个东西也就是那么个味儿,而且有些甜的出奇。不过听说父亲对月饼依然是情有独钟,唉,应该劝劝他,这么甜的东西不要吃太多了。另外一件事儿,就是一家人好好的在一起吃一顿团圆饭,那时的我们并不是很理解这个“团圆”的重要意义,只是知道有好吃的。秋天了,鸭正肥,鱼也肥,哈哈,美餐一顿,当然畅快。
教师节的时候我和几个同学一起去探望张老师了,几个同学聚在一起聊的也是欢畅。回来的路上问黄师傅有没有新的发展,还逗他要出去逛逛,四处搜寻多发展一下,不要老是呆在家里成了“深度宅男”。
其实这哪是说黄师傅呀,完全是自嘲!

Sunday, September 07, 2008

搬家了

昨天好辛苦,终于将那么一堆东西搬到畅春园了。 本来是打算残奥完了之后搬的,因为开始保卫部说外面的车一律不让进校园。可是昨天早上晾衣服的时候看到一家搬家公司的车就在我们楼前,于是上前打听了,听说只要跟保安说一声就可以了,于是跟他要了名片,并问了价钱,200呀,这个时候好便宜呀,一般的搬家公司这个时候都要300以上。赶紧电话给保卫部值班,结果不但不需要提前一天登记,只要当天登记就可以了,于是赶紧跟搬家公司敲定下午3:00过来搬。 中午忙了一个多小时,将东西都整理好打包了,结果快到三点的时候说他们的车是双号,不能绕过来,这里是场馆区,很多交警。我倒……,很有可能是后悔这么低的价钱了,还说让我第二天再搬。我靠……,让我将捆好的被褥打开,再睡一晚?我才不干了。最后他们说叫小车过来,可是过了一段时间我电话过去问车是不是派出来了,居然还没有派呢。管他了,这门生意我不跟你做了! 另外找了两个平板车,100块钱,居然一趟就搬过去了,而且两个师傅还负责搬,真是辛苦两位师傅了,还要特别鸣谢郝老师! 上下5层,爬了不记得多少趟,累死我了。呆在屋里,将包一个一个打开来,收拾好东西,已经是8:00了,洗了个热水澡,躺在床上看电视了。哈哈哈,又是电视。

Friday, July 11, 2008

有点无聊

爸妈回家了,需要自个儿找食吃。坐在电脑前,颇觉无聊的很,就那么几个网站,浏览了一遍之后就不知道该干什么了。晚上回家看电视,都没有什么好看的电视。记得那天看到一个电视,里面一个女的说:“为什么现在电视剧中的女主角要么就得白血病,一个个都柔弱不堪,难道这就是男人对女人的要求吗?”,另外一个男的回答道:“现在电视剧的普遍观众都是些中年妇女,所以这是女人对女人的要求。”我当时就倒……,我也是在经常看电视呀……

Monday, April 02, 2007

数据权限设计思考

目前有关用户权限采用的比较多的都是基于RBAC模型,即通过对角色权限的定义完成对用户权限的限制。有关功能权限部分想必都比较清楚,就是将系统的功能模块划分清楚,并赋予不同角色的访问权限,这样在用户访问某个功能模块之前进行权限校验即可。但是有关数据权限部分却一直比较模糊。

在如下这篇文章中给出一个权限模型,里面提到了数据权限的建模。
http://blog.csdn.net/fly_cloud/archive/2006/08/09/1041807.aspx
这个模型中有关数据权限也是对角色进行权限限定。模型中定义了几个概念:
资源:用户将要访问的数据对象(如用户)
数据对象类型:对用户将要访问的数据对象的限定类型(如部门)
资源数据对象类型:上面两个概念关联产生的,即用户要访问什么类型的数据对象(如××部门的用户,但是此时的××是通用的,只有将数据对象类型具体化之后××才会出现)。

将上面的资源数据对象类型实例化(即××具体化)之后就形成了一条数据对象访问规则,将这条规则附加给某个角色就完成了对角色数据访问权限的限定。这个模型定义是很清楚的,但是如何具体实现,其实是一个比较复杂的问题。

一个比较直观的想法就是在业务层之上加一个数据权限校验层。

上面定义的数据对象类型其实就是用户访问的数据对象的属性,因此在校验的时候确定相关数据对象的属性是否满足用户数据权限规则即可,对于增删改就是操作之前校验,对于查询就需要对查询结果过滤。当然为了整个实现的简单需要确保系统中的所有数据对象Class都是从一个Class中继承而来限制是。这一想法实现起来比较简单,但是有一个限制和一个性能忧虑。限制就是为了保证规则校验的进行,必须使得所有数据对象都应当具有权限规则定义的相应属性,如果规则定义的属性发生变化,势必需要所有数据对象的生成方法发生变化。性能忧虑就是对查询结果的过滤,其实在一般的MIS系统中多数情况是进行查询,但是如果依照这种方法进行结果过滤的话,可能会存在性能的问题。

因此,这一想法具有紧耦合和性能问题。

另外一个想法依然无法避免紧耦合,但是可以避免性能问题。然而在逻辑上就没有上面那个直观了。这一想法就是将数据权限规则转成SQL语句,嵌入到数据访问层中去。

因为资源必定会对应到某一个数据表,而数据对象类型也会对应的到某个数据表的某个属性列,因此完全可以依据数据权限规则动态生成SQL语句。数据权限规则可以如下定义:【资源数据对象类型 关系符 右值】,右值可以分为静态和动态两种:静态就是一个具体的值;动态就是用户的某个属性,这只有在与用户关联上之后才能确定。但是由于一个角色可以有多条数据权限规则,那么他们之后可以是与和或的关系,多个规则之间可能存在冲突,必须进行避免,如:当规则之间是与关系时,如果资源数据对象类型和关系符都相同时,就有可能冲突。具体的说就是要限制角色R只能访问A部门的用户且只能访问B部门的用户,这样子势必是相互冲突的。

在数据访问层调用一个统一的SQL生成方法,传入两个参数:不加限定是要访问的数据表名和角色数据权限规则集(此时的规则集中应当已经具有准确的右值,即如果是动态的也已经根据用户属性赋值了)。方法是:依次判断规则集中的规则是否有要访问的数据表名,如果有就生成SQL语句的FROM子句和WHERE子句,最终语句规则集关系符(AND | OR)生成FROM子句和WHERE子句返回。
数据访问层获得权限校验产生的FROM子句和WHERE子句嵌入到数据访问方法中去,这样就将数据访问和权限校验结合在一起了。明显是紧耦合,但是规避了性能问题。

因此,上面两个想法各有个的优势,但是同样都有一定的问题,是不是有更好的办法?继续思考中……

WSRP探秘

这周除了继续思考数据权限模型的建模和实现以外,主要还研究了一下WSRP(Web Service for Remote Portlet)。这个技术主要是采用WebService方法整合其他应用中的远程portlet到自己的Portal应用中去。
首先需要有一个Producer,即提供服务的出处,它分为两种:Simple Producer和Complex Producer,一般的采用Workshop创建Portal项目都是Complex的,而一般的Web Project即只采用Struts或者PageFlow的都是Simple的,其实生成Producer的过程很简单,如果是采用Workshop,则有很简单的菜单,当然即使不是采用Workshop,也就是拷贝几个Jar和生成几个XML文件。但是不管怎么样,都有一个问题就是这个Producer一定要运行在Portal Domain上,否则无法发现这个Producer中的服务(后面会提如何发现)。
接着就是应用Remote Portlet的Consumer。这一步操作也很简单,就是在创建portlet的时候选择类型remote portlet,然后输入producer的WSDL,一般是“[WEB_ERL]/producer?WSDL”,然后点击Retrive就可以发现Producer中的portlet了,之后选择一个portlet就可以创建成功了。
运行门户测试之后发现有两个问题:
1.URL问题,就是原来producer中的URL如果没有采用portal的URL tag或者应用生成URL的话,那么这个URL在consumer中应用就会出现连接错误,比较明显的就是一些图片无法显示。
2.用户身份问题,如果producer中需要用户身份,如果不设置CA和SSO,那么producer无法获取consumer中已经登录的用户。

这两个问题是致命性问题,涉及到对原来应用的修改和需要部署SSO,除此之外,加上需要producer部署在Portal Domain这一限制,当然还有producer和Consumer的风格差异问题,使得WSRP这一技术在当前工作中的应用,看来目前尚存在较大的困难。

《门徒》观感

昨天晚上看了电影《门徒》,很是震撼呢。整个故事据说都是原来发生在香港的一个过案,而展现在我们面前的却是涉毒的罪与罚。那种罪是一种非常令人揪心的罪,它将一个美好的事物活生生的在你的面前毁坏,你却无能为力。
在里面张静初演的阿芬是一个多么漂亮的女孩子,似乎看起来也很善良,可是吸毒之后的恐怖与言而无信,让人不免有些心痛,一个人就这么毁了,而相应的罚却由她一个人承担。还有古天乐演的她的老公,吸毒之后竟然变的这么龌龊和无耻,竟然让自己的老婆去卖,还将自己染毒的责任推到自己的老婆身上——当然了,她老婆也说自己染毒是他的原因,但是他们的话或许都已经不可信了。
然而这一切是谁的责任?是他们自己,是这个社会,还是那些制毒和贩毒者?贩毒庄家昆哥说这都是吸毒者自己的错,他甚至说“我们是作生意的,讲的是供求,有人吸,当然我们就要卖了”。看来,他虽然没有吸毒,但是人性的晦暗也已经差不多了。
片子的开头和结束都说“人为什么吸毒?或许是因为空虚。但是什么更可怕,是毒品还是空虚”。最后的一个镜头,吴彦祖演的阿力,这个警察卧底——他已经没有鸽子可喂了,面前摆放了那一堆“器材”,关键是他还点燃了那一支蜡烛。我想可能他也空虚了,他也想实验一下哪者更可怕。可爱的是这个时候那个小女孩进来了,将那堆器材给扔到了垃圾桶里。或许是这个可爱的小女孩驱走了他的空虚。
涉毒的罪与罚,罪不知是谁的罪,而罚却是极致的。

辛苦的回京路

每年春节回家,都是回家容易返京难,今年的返京之难达到了顶峰。
原本在回家之前就跟小詹说好了,要她找朋友搞定从长沙回京的票,说的是初六的。可怜的是初三还说已经到手了,可是到了初四却说出了点问题,于是乎我就四处找人。本来也做好了推迟几天回单位的打算了,可是后来找到大哥说他可以帮忙搞定初七的票,而且当时的态度很坚定,说他的朋友答应留一个铺位,然后送我上车就行了。因此我接着就预定了从县城到长沙的汽车票,初六到到了县城,在表姐家住了一夜,初期早上就坐汽车出发了,沿着京珠高速到了长沙。当时在汽车上看着窗外的风景,心里还在想要是沿着京珠高速回京会是怎么样呢,没有想到几个小时之后倒成了真的了。
到了长沙之后才发现大哥的那个朋友忽然联系不上了,而大哥也要赶晚上11点从株洲出发的火车,不得已之下只得购买了一张从长沙到北京的大巴高价票,而且这不是长途客运站发的,是一个旅行社的,要知道那时候初十之前连飞机票的没有了,更别说汽车票了。
后来由旅行社的人带着去等车,大哥也回株洲了。到了等车地点才发现被忽悠了,原来买票的时候(4点左右)说6点发车,可是据说之前12点左右打电话给司机问的时候,他却在1000公里之外,也就是说至少要到晚上10点以后。大哥已经回株洲了,我短信告诉他情况之后,他又接着联系他的朋友。后来到了晚上8点左右,大哥电话跟我说要我把汽车票退了,然后去火车站的什么什么地方进去。退票之后我四处找人问知不知道火车站的那个什么什么地方,最后终于问道一个摩的司机知道。到了那之后才发现不是那么简单,挤满了人,门口有武警把守,除了有证件的车让进以外就是单个的人了,之后发现背了行李就给推了出来,几次我想蒙混过关都不成。而我要上的那趟车是9点10分左右发车,8点45了我还没有进去,更不知道进去之后该怎么走了,当时那个急呀。不过也没有办法,看来是搞不定了,都已经作好了在长沙留宿一夜的打算了。
接着我又回到了那个旅行社,忽然听说去北京的车来了,赶紧又买了票跑去原来等车的地方。这才发现是误传,不过也没辙了,等着吧。一直到了10:30以后 才来了一辆车,然后临时决定发往北京,这样子我终于坐上了前往北京的车。
客车晚上11点才发车,一路颠簸,先是走的京珠高速,过了武汉之后又折走国道(更慢了),因为武汉至郑州段封了,然后第二天上午10点多才返回走高速。于是我一路看高速上的指示,然后计算到北京还要多少时间。最后是到了晚上9点才到北京下车,我打的到学校宿舍放下行李是9:30,然后赶紧抓紧时间去洗了个澡,我这个澡洗的之神速以致于澡堂师傅都说“这么快”!
唉,终于算是到了,当天太迟了没有打电话回家了,知道第二天才电话回家报平安。这次真是辛苦,不过也还是要感谢那些为我忙活的亲戚朋友们。