管理保全

保全会无限期地保留数据,以履行法律义务或保留义务。保全通常会应用于一个或多个用户,以确保在诉讼或调查不再有效之前,系统不会删除可能与诉讼或调查相关的数据。

如果处于保全状态的用户删除了保全的数据,则该数据将从该用户的视图中移除,但会保留在保险柜中。只要保全未解除,保险柜管理员就可以搜索和导出这些数据。

保全包含以下部分:

  • 服务 - 负责保存数据的应用。该服务可以设置为邮件、云端硬盘或网上论坛。
  • 范围 - 保全所涵盖的实体。您可以将范围设置为一个或多个用户帐号,或某个组织部门 (OU)。
  • 其他选项(可选)- 用于缩小要在指定范围内保留的数据范围的具体详细信息(搜索查询或配置选项)。选项包括:
    • 邮件、网上论坛:用于缩小保全范围的搜索查询
    • 云端硬盘:将共享云端硬盘纳入保全范围

如需使用保险柜资源,该帐号必须具有所需的保险柜权限和对该诉讼或调查的访问权限。要访问诉讼或调查,帐号必须创建了诉讼或调查、与该诉讼或调查共享,或者拥有查看所有诉讼或调查权限。

使用搜索查询为特定用户账号中的邮件创建保全

以下示例展示了如何为以下文件创建名为“我的第一批邮件帐号保全”的保全:

  • 服务:mail
  • 实体:用户帐号“user1”和“user2”
  • 其他选项:搜索查询“to:ceo@company.com”

AdminSdk 检索用户帐号 ID。请注意,HeldAccount 可以接受帐号 ID 或电子邮件地址。如果两者都指定,则使用电子邮件地址并忽略帐号 ID。

Java

HeldMailQuery mailQuery = new HeldMailQuery().setTerms("to:ceo@company.com");
List accounts = Lists.newArrayList();
accounts.add(new HeldAccount().setAccountId(user1accountId));
accounts.add(new HeldAccount().setEmail(user2Email));
Hold hold = new Hold()
    .setName("My First mail Accounts Hold")
    .setCorpus("MAIL");
    .setQuery(new CorpusQuery().setMailQuery(mailQuery))
    .setAccounts(accounts);
Hold createdHold = client.matters().holds().create(matterId, hold).execute();
  

Python

def create_hold_mail_accounts(service, matter_id, account_id):
    mail_query = {'terms': 'to:ceo@company.com'}
    accounts = [
        {'accountId': user1_account_id},
        {'email': user2_email}
    ]
    wanted_hold = {
        'name': 'My First mail Accounts Hold',
        'corpus': 'MAIL',
        'query': {
            'mailQuery': mail_query
        },
        'accounts': accounts
    }
    return service.matters().holds().create(
        matterId=matter_id, body=wanted_hold).execute()

为组织部门中的云端硬盘创建保全,并将共享云端硬盘内容包含在内

以下示例展示了如何为以下文件创建名为“我的首个云端硬盘组织部门的保全”的保全:

  • 服务:云端硬盘
  • 实体:组织部门“Finance”(在 orgUnitId 中捕获组织部门 ID)
  • 其他选项:包括此组织部门中的用户所属的共享云端硬盘

AdminSdk 检索组织部门 ID。

Java

HeldOrgUnit orgUnit = new HeldOrgUnit().setOrgUnitId(orgUnitId);
// Include shared drives content.
HeldDriveQuery driveQuery = new HeldDriveQuery().setIncludeSharedDriveFiles(true);
// Create the hold.
Hold hold = new Hold()
    .setName("My First Drive OU Hold")
    .setCorpus("DRIVE")
    .setQuery(new CorpusQuery().setDriveQuery(driveQuery))
    .setOrgUnit(orgUnit);
Hold createdHold = client.matters().holds().create(matterId, hold).execute();
return createdHold;

Python

def create_hold_drive_org(service, matter_id, org_unit_id):
    drive_query = {'includeSharedDriveFiles': True}
    org_unit = {'orgUnitId': org_unit_id}
    wanted_hold = {
        'name': 'My First Drive OU Hold',
        'corpus': 'DRIVE',
        'orgUnit': org_unit,
        'query': {
            'driveQuery': drive_query
        }
    }
    return service.matters().holds().create(
        matterId=matter_id, body=wanted_hold).execute()

为特定群组账号在特定日期范围内的群组创建保全

以下示例展示了如何为以下文件创建名为“我的第一个群组保全”的保全:

  • 服务:群组
  • 实体:“group1”和“group2”群组帐号
  • 其他选项:仅保全发送日期介于“startTime”和“endTime”之间的消息

AdminSdk 检索群组帐号 ID。

Java

String APRIL_2_2017_GMT = "2017-04-02T00:00:00Z"; // See below for format*.
 
List accounts = Lists.newArrayList();
accounts.add(new HeldAccount().setAccountId(accountId));
accounts.add(new HeldAccount().setAccountId(accountId2));
HeldGroupsQuery groupQuery = new HeldGroupsQuery();
// Restrict by sent date.
groupQuery.setStartTime(APRIL_2_2017_GMT);
groupQuery.setEndTime(APRIL_2_2017_GMT);
// create the hold
Hold hold = new Hold()
    .setName("My First Group Hold")
    .setCorpus("GROUPS")
    .setQuery(new CorpusQuery().setGroupsQuery(groupQuery));
    hold.setAccounts(accounts);
Hold createdHold = client.matters().holds().create(matterId, hold).execute();
 

Python

def create_hold_groups_date_range(service, matter_id, group_account_id):
    groups_query = {
        'startTime': '2017-04-02T00:00:00Z', # See below for format*
        'endTime': '2017-04-02T00:00:00Z'
    }
    accounts = [{'accountId': group_account_id}]
    wanted_hold = {
        'name': 'My First Group Hold',
        'corpus': 'GROUPS',
        'query': {
            'groupsQuery': groups_query
        },
        'accounts': accounts
    }
    return service.matters().holds().create(
        matterId=matter_id, body=wanted_hold).execute()
 
  • 时间戳格式。此外,start/endTime 会转换为格林尼治标准时间,并向下舍入到给定日期的开始日期。

查询和修改现有保全

以下示例展示了如何列出现有保全涵盖的所有帐号:

Java

client.matters().holds().accounts().list(matterId, holdId).execute().getAccounts();

Python

# If no accounts are on hold, ['accounts'] will raise an error.
def list_held_accounts(service, matter_id, hold_id):
    return service.matters().holds().accounts().list(
        matterId=matter_id, holdId=hold_id).execute()['accounts'] 

以下示例展示了如何在现有保全中添加帐号和移除帐号:

Java

// Add an account by id.
client
        .matters()
        .holds()
        .accounts()
        .create(matterId, holdId, new HeldAccount().setAccountId(accountId))
        .execute();
// Remove an account by id.
client.matters().holds().accounts().delete(matterId, holdId, accountId).execute();

String email = "email@email.com";
// Add an account by email.
client
        .matters()
        .holds()
        .accounts()
        .create(matterId, holdId, new HeldAccount().setEmail(email))
        .execute();

Python

 
def add_held_account(service, matter_id, hold_id, account_id):
    held_account = {'accountId': account_id}
    return service.matters().holds().accounts().create(
        matterId=matter_id, holdId=hold_id, body=held_account).execute()

def remove_held_account(service, matter_id, hold_id, account_id):
    return service.matters().holds().accounts().delete(
        matterId=matter_id, holdId=hold_id, accountId=account_id).execute()

def add_held_account(service, matter_id, hold_id, email):
    held_account = {'email': email}
    return service.matters().holds().accounts().create(
        matterId=matter_id, holdId=hold_id, body=held_account).execute()
 

以下示例展示了如何修改现有组织部门保全的组织部门:

Java

Hold hold = client.matters().holds().get(matterId, holdId).execute();
hold.getOrgUnit().setOrgUnitId(newOrgUnitId);
Hold modifiedHold = client.matters().holds().update(matterId, holdId, hold).execute();
return modifiedHold;
 

Python

def update_hold_ou(service, matter_id, hold_id, org_unit_id):
    current_hold = get_hold(matter_id, hold_id)
    current_hold['orgUnit'] = {'orgUnitId': org_unit_id}
    return service.matters().holds().update(
        matterId=matter_id, holdId=hold_id, body=current_hold).execute() 

以下示例展示了如何列出诉讼或调查的所有保全:

Java

 
String matterId = "Matter Id";

// List all holds. List holdsList = client.matters().holds().list(matterId).execute().getHolds();

// Paginate on holds. ListHoldsResponse response = client .matters() .holds() .list(matterId) .setPageSize(10) .execute();

String nextPageToken = response.getNextPageToken(); if (nextPageToken != null) { client .matters() .holds() .list(matterId) .setPageSize(10) .setPageToken(nextPageToken) .execute(); }

Python

# This can paginate in the same manner as with matters.
def list_holds(service, matter_id):
    return service.matters().holds().list(matterId=matter_id).execute()