创建用于 RCP 应用程序的声明性安全模型
  

2007 年 5 月 24 日

基于富客户端的业务应用程序需要严密的安全规则,以使不同类型的用户能够获得预先确定的访问权限。本文解释了如何通过利用 Eclipse 平台提供的特性,构建用于富客户端平台(RCP)应用程序的灵活的安全模型。

安全性对于 RCP 应用程序的重要性

控制对工作台内容和 SWT 控件的访问对于 RCP 应用程序来说是很重要的。开发人员必须根据用户角色隐藏工作台内容和用户控件。然而,对于开发人员通常需要的安全特性而言,Eclipse 所提供的支持相对较少。此安全性框架示例将控制呈现给用户的功能。

Eclipse 提供了哪些特性

活动是什么?

Eclipse 维护着一个所支持的活动的、单一、全局性的集合。一个活动是:

  • 针对相关 UI 功能的分组机制。
  • 由相容或专有模式集合指定。
  • 通常由组装应用程序的管理员或产品经理定义。

请参阅 参考资料 来获得关于 Eclipse 活动的更多背景信息。

Eclipse 提供 org.eclipse.ui.activities 扩展点,作为控制组相关的 UI 功能的机制。活动 是标识符的逻辑集合。标识符 代表功能,还能够代表其他内容,例如视图或编辑器首选页。当活动的功能被提供给用户时,此活动就处于启用状态。反之,当标识符被禁用时,此活动就处于隐藏状态。活动能够要求一个或多个其他活动,这意味着启用一个活动会启用此活动依赖的所有活动。活动也可被分组到一个或多个类别,来呈现给用户。





Eclipse 能够过滤哪些功能?

Eclipse 能够过滤五种功能:

  • 视图
  • 编辑器
  • 向导
  • 透视图
  • 菜单

本文通过将访问权集成到两个可管理单元(工作台级访问和控件级访问)的方式,解决了应用程序级的安全性问题。

工作台级访问 包括对工作台内容(例如编辑器、视图和透视图)的访问。控件级访问 包括对 SWT 控件(例如标签、按钮、组合框等)的访问。

在一个典型的组织中,一些用户具有多重角色,这就要求一个好的安全性架构能够识别具有多重身份 的用户(指组织中同时具有多种角色的用户)。应用程序需要一个健壮的安全模型来处理类似场景。通过使用以下安全模型,您将拥有合适的工具来创建具有安全性的安全的应用程序,而且使用此应用程序的用户不会感觉麻烦。





报销应用程序概述

这个报销应用程序是一个样本应用程序,用于说明如何将客户端活动映射到服务器端角色。在深入到实现细节之前,让我们先来看看应用程序架构及其功能。此报销应用程序是用于跟踪员工开支的企业应用程序。此应用程序的用户包括员工、经理和管理员。

员工
员工使用此应用程序来记录其可能的业务开支,并申请报销。申请被提交之后,此应用程序会通知此员工的经理,经理会审查此申请,并决定是否批准申请。员工使用此应用程序来创建和提交开支申请。员工还可使用此应用程序来查看和删除之前提交的开支申请。所有这些活动都是基于登录的用户的角色的。
经理
当组中的员工提交了一份开支申请时,经理会接到通知。然后经理就能够决定是否批准此开支申请。
管理员
管理员能够查看整个报告并恢复意外删除的记录。

经理和管理员具有两个角色。他们是生成开支报告的员工,他们也能够检查其他员工创建的开支报告。

以下用例图说明了每种类型的用户能够根据角色执行的功能:


图 1. 用例视图






用户和报销应用程序之间的交互

登录屏幕是应用程序的起始屏幕。此屏幕提示用户输入用户名和密码。通过身份验证的用户会建立用户角色,并基于其角色(员工/经理/管理员)使用活动,例如查看或创建开支报告。

员工视图

员工可使用三种活动:

  • 创建开支报告
  • 查看开支报告
  • 删除开支报告

图 2. 员工视图


经理视图

经理拥有批准权以及正常的员工权利。


图 3. 经理视图


管理员视图

管理员拥有和员工相同的访问权,另外还有管理员访问特权(类似于 UNIX? 超级用户)。


图 4. 管理员视图






应用程序实现

  1. 创建一个具有 RCP 支持的 com.examples.reimbursement.demo 插件项目
  2. 创建一个 roles.exsd

图 5. 角色模式定义


  1. 将活动添加到 “org.eclipse.ui.activities” 扩展点。

清单 1. 将活动添加到插件
                
An example of adding activities to the "org.eclipse.ui.activities" extension point: 
      <activity
            id="com.examples.reimbursement.viewActivity"
            name="ViewActivity">
         <activityPatternBinding
            activityId="com.examples.reimbursement.viewActivity"
            pattern=".*/emp\..*">
      

  1. 将活动映射到 com.examples.authorization.demo.roles 扩展点中的角色。

清单 2. 将角色映射到插件中的活动
                
      <role
          id="com.examples.reimbursement.demo.employee"
          label="com.examples.reimbursement.demo.employee"
          roleId="empRole">
       <enabledActivity id="com.examples.reimbursement.viewActivity">
       <enabledActivity id="com.examples.reimbursement.createActivity">
    <role>

  1. RegistryReader的帮助下读取角色扩展点。

清单 3. 从插件中读取角色
                
      readRegistry(Platform.getExtensionRegistry(),PLUGIN_ID, PL_ROLES_EXTENSION)

  1. 启动 Eclipse 应用程序,运行本产品。

结束语

在本文中,您开发了一个足够灵活的安全模型来使您的应用程序增值。您还能够将此安全模型作为插件插入到任何现有应用程序中。小部件级安全性虽然在大多数应用程序中是一个有用的特性,但是通常不被使用,这是因为其实现过程中涉及的工作量及其导致的应用程序性能风险过大。

共8页 上一页 下一页