Workspace security example

The following code example illustrates how to use workspace security methods (including methods of the Folder, Folders, Permission, and Permissions objects) to retrieve workspace security permissions applied to Public and Personal folders. This example provides a general idea of how you might use the HCL Compass API to create a workspace folder security policy and retrieve information on current settings.

Perl


use strict;
require "CQPerlExt.pm";


################################
# Subroutines

sub get_access_description($)
{
    my ($folder) = @_;

    my $perm  = $folder->GetPermission();
    my $kind  = $perm->GetKindName();
    my $group = $perm->GetGroup($CQPerlExt::CQ_NAME_EXTEND_WHEN_NEEDED);

    return "$kind for $group";
}

sub show_subfolders($$);
sub show_subfolders($$)
{
    my ($folder, $indent) = @_;

    my $name = $folder->GetName();
    my $access = get_access_description($folder);

    my $folders = $folder->GetSubfolders();
    my $count = $folders->Count();

    print $indent . "$name: $access\n";
    for (my $i = 0; $i < $count; $i++) {
        my $folder = $folders->Item($i);
        show_subfolders($folder, $indent . "|  ");
    }
}


################################
# Main

my $session;
my $workspace;
my $PublicFolder;
my $PersonalFolder;
my $PublicFolderName;
my $PersonalFolderName;

if (scalar(@ARGV) != 4) {
    die "ERROR: insufficient arguments; need username, password, database, dbset\n";
}

my ($username, $password, $database, $dbset) = @ARGV;

$session = CQSession::Build();
$session->UserLogon($username, $password, $database, $dbset);

$workspace = $session->GetWorkSpace();

$PublicFolder = $workspace->GetPublicFolder(); 
$PublicFolderName = $workspace->GetPublicFolderName();
show_subfolders($PublicFolder, "");

$PersonalFolder = $workspace->GetPersonalFolder(); 
$PersonalFolderName = $workspace->GetPersonalFolderName();
show_subfolders($PersonalFolder, "");

$session->Unbuild();
$session = undef;

# end Main