acre Access Control Application Sections

Understanding how the acre Access Control application is organized will help you develop custom applications and integrations. This guide explains each functional module and how they map to API capabilities.


Quick Reference

Module Primary Purpose Key API Objects
Access Control Grant/deny access decisions Person, CardAssignment, AccessLevel, Schedule
Access Configuration Configure access rules Schedule, Holiday, AccessLevel, Area
General Configuration System-wide settings EventType, App, Generic
Hardware Provisioning Physical device management Controller, Downstream, Reader, Input, Output
Video Management Camera and recording control Camera
Visitor Management Guest access tracking Visitor, Building
System Administration User and security management User, OperationRight, Instance

Access Control

Access control is the core function of the acre Access Control system. This module provides security tools that determine which personnel can access specific areas of a facility.

Key Capabilities

Capability Description Related API
Access Decisions Grant or deny access based on credentials and rules CardAssignment, AccessLevel
Scheduling Time-based access rules and holiday exceptions Schedule, Holiday
Area Control Define and manage secure areas Area, AreaAssignment
Mustering Emergency roll call and personnel location Person, CardAssignment.LastUsed

API Example: Check Access Rights

// Get a person by their key using GetByHrefAsync with constructed href
var personHref = $"/api/f/{instanceKey}/people/{personKey}";
var person = await client.GetByHrefAsync<PersonInfo>(personHref);

// Or get connected access levels directly
var accessLevels = await client.GetConnectedObjectsAsync(person, "AccessLevel");

foreach (var accessLevel in accessLevels.OfType<AccessLevelInfo>())
{
    Console.WriteLine($"Access Level: {accessLevel.CommonName}");
}

Access Configuration

Access configuration allows users to view and modify all features used to configure physical access to facilities.

Configuration Elements

Element Description Use Case
Schedules Define time windows for access “Business Hours: Mon-Fri 8am-6pm”
Holidays Override schedules on specific dates “Christmas Day: No access”
Access Levels Group readers with schedules “Engineering: Lab + Office during business hours”
Elevator Access Floor-level access control “Executive floor access for managers only”
Area Assignments Intrusion zone configuration, anti-passback setup “Arm/disarm areas by schedule”

API Example: Create a Schedule

var schedule = new ScheduleInfo
{
    CommonName = "Business Hours",
    ScheduleDurations = new[]
    {
        new ScheduleDurationItem
        {
            Days = DaysOfWeek.Monday | DaysOfWeek.Tuesday | 
                   DaysOfWeek.Wednesday | DaysOfWeek.Thursday | 
                   DaysOfWeek.Friday,
            StartTime = new TimeSpan(8, 0, 0),
            EndTime = new TimeSpan(18, 0, 0)
        }
    }
};

var created = await client.AddScheduleAsync(instance, schedule);

General Configuration

General configuration provides access to system-wide settings including events, design customization, and directory services.

Configuration Areas

Area Description API Objects
Event Configuration Define event types and behaviors EventType, AlarmDefinition
Administrative Features System-wide settings User, OperationRight, Group
LDAP Agents Directory service synchronization LdapAgent, LdapQuery
Instance Settings Per-instance configuration Instance, InstanceSettings

Hardware Provisioning

Hardware provisioning is where physical devices are configured, monitored, and maintained.

Device Hierarchy

Controller (ISC)
├── Downstream (DRI, SRI, ICM, OCM)
│   ├── Reader (Entry, Exit)
│   ├── Input (Door Contact, REX)
│   └── Output (Lock, Alarm)
└── Direct Peripherals
    ├── Reader
    ├── Input
    └── Output

Supported Hardware

Device Type Examples API Object
Controllers Mercury EP1502, EP2500, LP1502, etc Controller
Downstreams MR50, MR52, MR16IN, MR16OUT, etc Downstream
Readers HID, Schlage, OSDP readers, etc Reader
Inputs Door contacts, motion sensors, etc Input
Outputs Locks, relays, LED indicators, etc Output
Gateways Engage wireless gateways Gateway
Panels Intrusion panels (acre Intrusion, Bosch) AcreIntrusionPanel, Panel

API Example: Add a Reader to Mercury Controller

For Mercury controllers, readers are added as peripherals to downstream devices:

var reader = new MercuryReaderInfo
{
    CommonName = "Main Lobby - Entry Reader",
    Address = 1,
    MercuryReaderType = MercuryReaderTypes.Wiegand,
    MercuryReaderAccessMethod = MercuryReaderAccessMethods.Card
};

// Add the reader as a peripheral to the downstream (links automatically)
var createdReader = await client.AddPeripheralToDownStreamAsync(downstream, reader);

API Example: Add a Reader to ASC Controller

For ASC controllers, readers are added to folders using the Readers2 endpoint:

var reader = new AscReaderInfo
{
    CommonName = "Main Entrance Reader"
};

// Add the reader to the folder
var createdReader = await client.AddReaderAsync(folder, reader);

Video Management

The video management module integrates with digital video systems for monitoring and archiving.

Capabilities

Feature Description API Support
Camera Integration Connect cameras from various DVR/NVR systems Camera
Live Viewing Real-time video streaming Via Video Player Plugin
Playback Review recorded footage Time-based queries
Event Linking Associate video clips with access events EventMessageData

Visitor Management

Visitor management enables organizations to enroll, track, and manage guest access.

Workflow

  1. Pre-Registration - Schedule visits in advance
  2. Check-In - Sign visitors in, print badges
  3. Access Assignment - Issue temporary credentials
  4. Tracking - Monitor visitor location
  5. Check-Out - Sign visitors out, deactivate access

API Example: Create a Visitor

// Create a person for the visitor
var visitor = new PersonInfo
{
    CommonName = "John Smith - Visitor",
    GivenName = "John",
    Surname = "Smith"
};

// Add metadata for visitor tracking
visitor.Metadata = new[]
{
    new MetadataItem
    {
        Application = "VisitorManagement",
        Values = new
        {
            Company = "Acme Corp",
            HostPersonKey = hostPerson.Key,
            ScheduledArrival = DateTime.Today.AddHours(9),
            ScheduledDeparture = DateTime.Today.AddHours(17)
        }
    }
};

var created = await client.AddPersonAsync(instance, visitor);

// Assign temporary access with expiration
var tempCard = new CardAssignmentInfo
{
    EncodedNumber = 12345,
    FacilityCode = 100,
    ExpiresOn = DateTime.Today.AddDays(1)
};

visitor.CardAssignments = new[] { tempCard };
await client.UpdatePersonAsync(visitor);

System Administration

System administration provides tools for managing users, permissions, and system configuration.

Administrative Functions

Function Description Who Can Perform
User Management Create, modify, disable users System Administrators
Permission Assignment Grant/revoke operator rights System Administrators
Password Policies Configure password requirements System Administrators
Audit Logging Review system activity System Administrators
Instance Management Create/configure instances System Administrators

API Example: Create an Operator

// Create a person first
var person = new PersonInfo
{
    CommonName = "Jane Operator",
    GivenName = "Jane",
    Surname = "Operator"
};
var createdPerson = await client.AddPersonAsync(instance, person);

// Create a user account linked to the person
var user = new UserInfo
{
    Username = "joperator",
    MustChangePassword = true,
    IsDisabled = false
};

// Add the user first
var createdUser = await client.AddUserAsync(instance, user);

// Link the user to the person using AssignConnectedObjectAsync
await client.AssignConnectedObjectAsync(createdUser, createdPerson, "Person", false);

// Assign limited permissions using AddOperationRightsAsync
var opRight = new OperationRightInfo
{
    CommonName = "People Read/Update Rights",
    System = "Person",
    Actions = new[] { "Read", "Update" },
    GrantType = GrantTypes.Grant,
    Enabled = true
};

await client.AddOperationRightsAsync(instance, "YourAppCode", user.Key, opRight);

See Also