Skip to content

Corpus Permission Client

Gunpal Jain edited this page Feb 16, 2025 · 3 revisions

Introduction

The CorpusPermissionClient provides methods for interacting with the Gemini API's Corpus Permissions endpoint. This allows you to manage access control for corpora by granting and revoking permissions for users or groups. This is essential for controlling who can access and modify your corpora.

Details

The CorpusPermissionClient offers the following functionalities:

Creating a Permission

The CreatePermissionAsync method grants a new permission for a corpus.
CreatePermissionAsync Method Documentation

using GenerativeAI.Clients;
using GenerativeAI.Types;

// ... other code ...

var corpusPermissionClient = new CorpusPermissionClient(platform, httpClient, logger); 
// Initialize CorpusPermissionClient

var parentCorpus = "corpora/my-corpus-id"; // Replace with the parent corpus name

var permission = new Permission
{
    GranteeType = GranteeType.User, // Or GranteeType.Group, GranteeType.Everyone
    EmailAddress = "[email address removed]", // Required if GranteeType is User or Group
    Role = Role.Reader // Or Role.Writer
};

var createdPermission = await corpusPermissionClient.CreatePermissionAsync(parentCorpus, permission);

if (createdPermission != null)
{
    Console.WriteLine($"Permission created: {createdPermission.Name}");
}
else
{
    Console.WriteLine("Failed to create permission.");
}

Listing Permissions

The ListPermissionsAsync method retrieves a list of permissions for a corpus.
ListPermissionsAsync Method Documentation

using GenerativeAI.Clients;
using GenerativeAI.Types;

// ... other code ...

var corpusPermissionClient = new CorpusPermissionClient(platform, httpClient, logger); 
// Initialize CorpusPermissionClient

var parentCorpus = "corpora/my-corpus-id"; // Replace with the parent corpus name

var listPermissionsResponse = await corpusPermissionClient.ListPermissionsAsync(parentCorpus); 
// You can provide pageSize and pageToken

if (listPermissionsResponse != null && listPermissionsResponse.Permissions != null)
{
    foreach (var permission in listPermissionsResponse.Permissions)
    {
        Console.WriteLine($"Permission Name: {permission.Name}");
        Console.WriteLine($"Grantee: {permission.EmailAddress}");
        Console.WriteLine($"Role: {permission.Role}");
    }
}
else
{
    Console.WriteLine("No permissions found.");
}

Getting a Permission

The GetPermissionAsync method retrieves a specific permission by name.
GetPermissionAsync Method Documentation

using GenerativeAI.Clients;
using GenerativeAI.Types;

// ... other code ...

var corpusPermissionClient = new CorpusPermissionClient(platform, httpClient, logger); 
// Initialize CorpusPermissionClient

var permissionName = "corpora/my-corpus-id/permissions/my-permission-id"; 
// Replace with the permission name

var permission = await corpusPermissionClient.GetPermissionAsync(permissionName);

if (permission != null)
{
    Console.WriteLine($"Permission Grantee: {permission.EmailAddress}");
    Console.WriteLine($"Permission Role: {permission.Role}");
}
else
{
    Console.WriteLine("Permission not found.");
}

Updating a Permission

The UpdatePermissionAsync method updates an existing permission.
UpdatePermissionAsync Method Documentation

using GenerativeAI.Clients;
using GenerativeAI.Types;

// ... other code ...

var corpusPermissionClient = new CorpusPermissionClient(platform, httpClient, logger); 
// Initialize CorpusPermissionClient

var permissionName = "corpora/my-corpus-id/permissions/my-permission-id"; 
// Replace with the permission name

var updatedPermission = new Permission
{
    Name = permissionName, // Important: Include the name in the updated permission object.
    Role = Role.Writer // Update the role
    // ... other properties to update ...
};

string updateMask = "role"; // Specify the fields to update

var resultPermission = await corpusPermissionClient.UpdatePermissionAsync(
    permissionName, 
    updatedPermission, 
    updateMask
);

if (resultPermission != null)
{
    Console.WriteLine($"Permission updated: {resultPermission.Role}");
}
else
{
    Console.WriteLine("Failed to update permission.");
}

Deleting a Permission

The DeletePermissionAsync method revokes a permission.
DeletePermissionAsync Method Documentation

using GenerativeAI.Clients;

// ... other code ...

var corpusPermissionClient = new CorpusPermissionClient(platform, httpClient, logger);
// Initialize CorpusPermissionClient

var permissionName = "corpora/my-corpus-id/permissions/my-permission-id"; 
// Replace with the permission name

await corpusPermissionClient.DeletePermissionAsync(permissionName);

Console.WriteLine($"Permission deleted: {permissionName}");

Important Considerations

  • Ensure proper authorization is configured before using the CorpusPermissionClient. See the Authentication page.
  • Replace placeholder permission names, IDs, and corpus names with actual values.
  • Handle potential exceptions during API calls.
  • Be mindful of rate limits when making frequent requests. See the official documentation for details.
  • The updateMask parameter in UpdatePermissionAsync is crucial. It specifies which fields of the Permission object should be updated. Only the fields listed in the updateMask will be modified.

API Reference