首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

设计和实现社交网络应用程序中的隐私控制(3)示例应用程序更新

设计和实现社交网络应用程序中的隐私控制(3)示例应用程序更新

将隐私策略引入应用程序现在隐私模型已建立,我们将在源代码中定义隐私策略并应用到不同的角色类型上。清单 2 显示的是用 XML 存储信息的方法。
清单 2. privacyPolicy.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
1 <?xml version="1.0" encoding="UTF-8"?>
2  <privacy-policy-config>
3
4   <data-policy-suite>
5       <data-policy-name>1</data-policy-name>
6       <public-display-role>1,2,3,4</public-display-role>
7       <private-display-role>2,3</private-display-role>
8   </data-policy-suite>
9      
10  <data-policy-suite>
11      <data-policy-name>2</data-policy-name>
12      <public-display-role>1,2,3</public-display-role>
13      <private-display-role>1,2,3</private-display-role>
14  </data-policy-suite>
15      
16  <privacy-policy-suite>
17      <country-list>Germany, France, UK</country-list>
18      <data-policy-name>1</data-policy-name>
19  </privacy-policy-suite>               
20  
21  <privacy-policy-suite>   
22      < country-list >China, US, </ country-list >
23      <data-policy-name>2</data-policy-name>
24  </privacy-policy-suite>   
25  
26 </privacy-policy-config>




privacyPolicy.xml 包含两种类型元素:<data-policy-suite> 和 <privacy-policy-suite >。二者共同定义了隐私策略。                               
在 <data-policy-suite> 中,有三种类型的元素:<data-policy-name>、<public-display-role> 和 <private-display-role>。第一个是 <data-policy-suite> 的 ID。它的值可以是数字或字母,且在所有元素中应保持惟一。本例中,我们用了一个数字作为 <data-policy-name> 值的 ID。第二个元素 <public-display-role> 定义了公共元素的隐私策略,它的值应为 1 至 4 之间的整数。整数代表角色类型:1(无动作用户)、2(Opt-in 用户)、3(贡献者)和 4(Opt-out 用户)。如果该元素中包含整数,就表示相应角色的用户的公共数据会显示在系统中。根据第 4 行至第 8 行的 <data-policy-suite> 定义,数字 1、2、3、4 都包含在 <public-display-role> 元素中;根据这样的数据策略组合,所有的公共数据都会在系统中显示。但根据第 10 至 14 行 <data-policy-suite> 代码定义,Opt-out 用户的公共数据会从系统显示的搜索结果中过滤掉。        
<data-policy-suite> 的第三个元素是 <private-display-role>。它与 <public-display-role> 的值类型定义相同,但由于私密信息的安全需求十分复杂,它和 <privacy-policy-suite> 被结合用于描述私密信息的隐私策略。根据需求小节的定义,Opt-in 用户、贡献者、Opt-out 用户已明确设置了是否允许系统处理其私密信息。然而,对于那些未回复系统通过 e-mail 或其他方式发送的 opt-in 请求通知的用户,将被划分为无动作用户。处理这些用户的私密信息,我们可以采取不同的规则,这取决于用户所在的国家。例如,在某些国家,如果用户未回复 opt-in 请求,可以认为其默认接受 opt-in 请求。相反,在另外一些国家,只有用户主动回复 opt-in 请求后,系统才认为他是 opt-in 用户。因此我们要根据不同的国家定义不同的私密信息的隐私策略,即使他们在系统中属于同样的用户类型(无动作用户)。这种情况下,<privacy-policy-suite> 需要用 <data-policy-suite> 描述私密信息的隐私策略。                           
<privacy-policy-suite> 包含两个元素:<country-list> 和 <data-policy-name>。第一个元素存储的是国家列表,第二个元素通过 ID 将第一个元素中的国家引用到 <data-policy-suite>。根据清单 2 中的第 16 至 19 行的定义,我们将德国、法国、英国设置到 data-policy-suite1 中。这意味着,在这些国家,根据第 7 行的定义,系统只能显示 Opt-in 用户和贡献者的私密信息。然后,第 21 行到 24 行定义了 <privacy-policy-suite>,表示在中国和美国的无动作用户、Opt-in 用户、贡献者的私密信息可以被显示出来。现实世界的隐私策略可能与此不同。系统管理员可以修改配置文件以使应用程序适应任何隐私需求。        
在应用程序级别,我们可以构造一个 “过滤” 函数以删除那些被 privacyPolicy.xml 定义为不适合显示的数据。
清单 3 显示了实现 PrivacyPolicy.xml 中定义的隐私策略的方法
清单 3. filterByPP 方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
1   /** Filter the friendList by display policies
2    * @param friendList    the friendList needs to be filtered
3    * @return  a friendList that fulfills privacy policies
4    */
5   public static List<String> filterByPP(List<String> friendList, String dataType){
6       List<String> retList = new ArrayList<String>();
7       for(String email: friendList){
8           String country = null;
9           try{
10              country = FBUtils.getCountry(email);
11          }catch (IOException e){
12              e.printStackTrace();
13          }
14          Set<Integer> displayRoleSet = new HashSet<Integer>();
15          displayRoleSet = FBUtils.getDisplayRoleSet(country, dataType);
16          if(0 == displayRoleSet.size()){
17              System.err.println("no display role");
18              continue; //no information should be displayed
19          }
20          int userRole = 0;
21          try{
22              userRole = FBUtils.getRole(email);
23              
24          }catch(IOException e){
25              e.printStackTrace();
26          }
27          if(displayRoleSet.contains(userRole)){
28              retList.add(email);
29          }
30      }
31      return retList;
32  }

返回列表