Microsoft 信息保护 SDK - 用户定义的权限

该Microsoft 信息保护 SDK 支持两种主要类型的标签驱动权限:基于模板的权限和用户定义的权限。

  • 基于模板的权限: 这些权限由安全与合规中心的标签管理员定义。 这些标签是集中管理的,配置中的更改会影响已有文件副本的用户。 例如,如果管理员从授权用户列表中删除用户,该用户在下次尝试提取许可证时将不再有权访问受保护的数据。

  • 用户定义的权限:在最终用户或应用程序进行标记时定义这些权限。 权限以用户到角色或用户到权限映射集合的形式传递到 MIP SDK。 这些权限将写入受保护文档的发布许可证中,与基于模板的权限不同,在共享后无法集中管理或修改这些权限,而无需直接访问和修改文档。

用户、权限和角色

由于用户预期将在标记时定义权限,因此应用程序必须提供一个接口,以允许用户或服务提供有关用户将拥有的电子邮件地址和权限或角色的输入。 此配置是通过传递 或 对象的集合完成的,这些集合专门定义谁应具有 UserRolesUserRights 对文档的访问级别。

// Create a List<string> of the first set of permissions. 
List<string> users = new List<string>()
{
    "alice@contoso.com",
    "bob@contoso.com"
};

// Create a List<string> of the Rights the above users should have. 
List<string> rights = new List<string>()
{
    Rights.View,
    Rights.Edit                
};

// Create a UserRights object containing the defined users and rights.
UserRights userRights = new UserRights(users, rights);

// Add them to a new List<UserRights>
List<UserRights> userRightsList = new List<UserRights>()
{
    userRights
};

结果是你拥有一个集合,指定 Alice 和 Bob 对受保护文件具有"视图"和" List<UserRights> 编辑"。 若要添加更多具有一组不同权限的用户,请重复此过程以创建第二个对象,传递新用户和权限,然后通过调用 添加到 List<UserRights> 集合 userRightsList.Add(userRights2)

此模式同样适用于 ,只需将权限替换为角色并 UserRoles 创建UserRoles集合,就可以实现 此模式。

应用保护

可以通过从 或 对象创建 ,然后将它传递给 来 ProtectionDescriptorList<UserRights>List<UserRoles> 设置保护 FileHandler.SetProtection() 。 最后,将更改提交到 文件以写入新文件。

何时对文件应用保护

通过 MIP SDK 设置标签 FileHandler.SetLabel() 时,它只需要采取措施并应用任何保护。 为 UDP (用户定义) 标签时,应用程序无法提前知道该标签是 UDP 标签。 MIP SDK 通过引发 类型的异常来显示此信息 Microsoft.InformationProtection.Exceptions.AdhocProtectionRequiredException 。 代码 FileHandler 应捕获此异常,然后触发用户或服务接口来定义自定义权限。 完成后,可以设置保护。 以下示例演示端到端模式,但假定你已实现一个函数来生成 List<UserRights> 对象。

try
{
    // Attempt to set the label. If it's a UDP label, this will throw. 
    handler.SetLabel(engine.GetLabelById(options.LabelId), labelingOptions, new ProtectionSettings());
}

catch (Microsoft.InformationProtection.Exceptions.AdhocProtectionRequiredException)
{
    // Assumes you've create a function that returns the List<UserRights> as previously detailed. 
    List<UserRights> userRightsList = GetUserRights();

    // Create a ProtectionDescriptor using the set of UserRights.
    ProtectionDescriptor protectionDescriptor = new ProtectionDescriptor(userRightsList);
    
    // Apply protection to the file using the new ProtectionDescriptor. 
    handler.SetProtection(protectionDescriptor, new ProtectionSettings());

    // Set the label. This will now succeed as protection has been defined. 
    handler.SetLabel(engine.GetLabelById(options.LabelId), labelingOptions, new ProtectionSettings());

    // Commit the change. 
    var result = Task.Run(async () => await handler.CommitAsync("myFileOutput.xlsx")).Result;
}

自定义保护

此过程还可用于通过设置保护和跳过步骤来仅设置 SetLabel() 保护。 如果应用程序不需要应用标签,则不需要异常处理程序,并且可以通过遵循 - - 模式 ProtectionDescriptor 设置 >SetProtection()>CommitAsync() 保护。

下一步