Yii系列-03:用户管理

这是一个应用所应具有的基本功能之一,不用从零开发。Yii Extensions有现成的东西直接可用,或者在其基础上进行定制。

以Yii-User Module为例。该扩展Module用于用户注册与管理。有用户注册、账号激活、密码修复、profile配置、用户CRUD功能。使用方法参见官网上的Yii-User extension

1 数据表结构

  该module的维护的用户数据有三张数据表,如下图:


  users表为基本表,profiles表中的字段数由profiles_fields表动态生成。

  通过UI维护profiles_fields表中的数据,详细定义了每个profile的名称、类型、验证、缺省等,运行时根据该表的CRUD操作对profiles的结构进行通过ALTER TABLE等语句重新重构。
 
2 登录流程
  首先,yii framework将 login请求转发到 yii user module,后者接管login流程,验证后,设置必要的状态并redirect返回。如图:
  
  需要说明以下几点:
  • 流程涉及framework和module两部分,左边蓝色两个类属于yii framework,右边黄色四个类属于Yii User Module。
  • 对于CWebUser的loginUrl的初始化值在protected/config/main.php中设置,参阅上篇文章,设为“user/login”,通过 urlManager 指向了User Module的Login Controller,该Controller中的defaultAction为login(步骤2)。
  • UserIdentity扩展自framework的CBaseUserIdentity,验证username(或者email)、password正确后,设置_id和username属性。
  • 登录成功后,UserLogin调用CWebUser的login方法,并将UserIdentity实例作为参数一并传递。CWebUser作为 CWebApplication的属性,设置id、name、state等,这些信息在整个application范围内可通过 Yii::app()->user访问。
3. 流程定制
  如果要对该流程进行定制,有两个地方是最佳的扩展点。
  • 在Session中设置User信息:UserIdentity验证通过后,此时该实例拥有User对象,可通过setState方法设置User的其他 信息,该信息随后经CWebUser的login方法处理进入session,可通过Yii::app()->user获取。
  • login成功的后续操作:UserLogin调用CWebUser的login方法之后,此时成功login流程已走完,可在此追加记录用户登录IP、发送email、系统检查等其他操作。
4. 角色判断
  通过tbl_users表中的supperuser属性,可标记用户是否属于administrator。
  程序中通过Yii::app()->findModule("user")->isAdmin()来判断。
  当然通过这种方式定义角色是比较简单的。yii 社区还有其他的module,专门解决角色及访问控制问题的。
posted @ 2013-03-05 14:00  gumreal  阅读(644)  评论(1编辑  收藏  举报