页面、视图等这些东西都是场所、广场、小区、大楼、楼层、空间。资源是“可以感知到的一定程度上不变的空间”,整个空间集中的元素被分门别类,被用一片森林来分解。
所有的资源都视作空间(问题空间),只是有些空间比人大,从而人可以进入里它面去,而有些空间比人小,人进不去或者不需要进入里面去就能解决这些小问题空间。比如“页面”可以看作比用户大,页面是个广场、大楼、房子、房间,用户可以进入这种场所。而一条“产品记录”可以看作一个抽屉、茶杯、桌子、笔筒,这种空间比用户小,用户不需要进入就可以处理它们。
每一个场所、房子、家具、抽屉、茶杯、桌子、笔筒上都绑定有与那个空间相关的操作,这些操作的实施会导致运动,导致空间的变换,这些操作如果是托管的(托管的意思是不是任何人都能通过那些操作引发运动)即是权限,这些权限被组织成组即是角色。用户来到当地空间时激活得到他当地拥有的角色。
系统发现当前用户来到了某个地方就为他激活他在当地拥有的角色。比如,系统发现用户打开了“产品管理”模块的首页面(那是一个包在整个产品管理场外面的切面。不是只有产品管理首页中有检测逻辑,产品管理场中的所有入口处都有检测逻辑用于发现谁进来了。),于是正在当前用户打开这个页面的此时,正在此时将当前用户拥有的产品管理相关的角色在会话中被激活。用户的角色被激活表示当前用户有相应的能力了,但是用户是否去行使自己的能力是不一定的。有时候用户登录进入系统,可能只是点了一个菜单,进去一个页面,找到一条记录,做一个操作就出来了。
对于大型系统,其用户往往拥有成百上千的角色,这些角色如果在登录时一并激活会多占空间,而如果我们对整个系统空间划分会话场,分出家、卧室、停车场、厨房、公司、马路等不同的子场的话,当用户进入具体的子场时再激活相应的角色,这样的话节省了内存(空间)。