pub struct AccessRightsObject { /* private fields */ }Expand description
BACnet Access Rights object (type 34).
Holds the positive and negative access rules that credentials and users
are assigned. Both rule arrays are BACnetARRAYs of BACnetAccessRule.
The application provisions them with
set_positive_access_rules and
set_negative_access_rules, and peers
write them whole, one element at a time, or resize them at index 0, with
the setters’ checks. Enable (property 133, LOG_ENABLE in
PropertyIdentifier) switches the whole object: while it is FALSE every
rule in both arrays counts as disabled (Clause 12.34.8). The optional
Accompaniment row (#1393) is served once the application sets it with
set_accompaniment. The object stores the
rules, the flag and the accompaniment without evaluating them; the
application checks a credential against the rules with
evaluate_access_rights (#1331).
§Restarts
An object built with new keeps everything in memory, so a
restart brings back what the application configures. One built with
with_persistence saves each write of the two
arrays, Enable and Accompaniment in an AccessRightsPersistence before
serving it, and serves the saved values when built again (#1392). A saved
value wins over the configured one: the setter for a property a write set
(property_saved) checks its argument but leaves
the property alone. To change a saved value, write the property.
Implementations§
Source§impl AccessRightsObject
impl AccessRightsObject
Sourcepub fn with_persistence(
instance: u32,
name: impl Into<String>,
persistence: Arc<dyn AccessRightsPersistence>,
) -> Result<Self, Error>
pub fn with_persistence( instance: u32, name: impl Into<String>, persistence: Arc<dyn AccessRightsPersistence>, ) -> Result<Self, Error>
An Access Rights object that keeps written rule arrays, Enable and
Accompaniment in persistence, starting from what is saved there for
this object, if anything. A saved Accompaniment serves the optional
row whether or not the application sets one.
Each saved array and Accompaniment goes through the setters’ checks,
so this fails when a saved array holds more than
MAX_ACCESS_RULES rules or a rule the
setters refuse, or the saved Accompaniment is one
set_accompaniment refuses,
as well as when storage cannot be read.
Sourcepub fn property_saved(&self, property: PropertyIdentifier) -> bool
pub fn property_saved(&self, property: PropertyIdentifier) -> bool
Whether storage holds a value a write set for property
(Positive_Access_Rules, Negative_Access_Rules, Enable, property 133,
or Accompaniment), now or before a restart. That property’s setter
then leaves it alone. Always false without persistence, and for any
other property.
Sourcepub fn wait_for_saves(&self)
pub fn wait_for_saves(&self)
Block until the saves queued so far have run. Dropping the object waits for them too.
Source§impl AccessRightsObject
impl AccessRightsObject
Sourcepub fn new(instance: u32, name: impl Into<String>) -> Result<Self, Error>
pub fn new(instance: u32, name: impl Into<String>) -> Result<Self, Error>
Create a new Access Rights object with no access rules, enabled. It
keeps what peers write in memory only; see
with_persistence.
Sourcepub fn set_enable(&mut self, enable: bool)
pub fn set_enable(&mut self, enable: bool)
Set Enable. FALSE disables every rule in both arrays (Clause 12.34.8) and leaves each rule’s own enable flag alone, so TRUE again brings the rules back as they were. The default, TRUE, is a local choice; the standard names none.
This configures the object and is not saved. With persistence, once a write has set Enable and it was saved, the saved value wins and this does nothing.
Sourcepub fn set_positive_access_rules(
&mut self,
rules: impl IntoIterator<Item = BACnetAccessRule>,
) -> Result<(), Error>
pub fn set_positive_access_rules( &mut self, rules: impl IntoIterator<Item = BACnetAccessRule>, ) -> Result<(), Error>
Replace Positive_Access_Rules, the rules that grant access.
The whole list is refused, keeping the rules set before, when it holds
more than MAX_ACCESS_RULES rules (NO_SPACE_TO_WRITE_PROPERTY), or
with VALUE_OUT_OF_RANGE when any rule (Clause 12.34.9.1):
- names a device that isn’t a Device in either reference (#1285);
- holds a specifier outside its two named values;
- is SPECIFIED for a member whose reference is left out;
- is ALWAYS or ALL for a member whose reference is present and not unspecified;
- is SPECIFIED for a location that names neither an Access Point nor an Access Zone and isn’t unspecified.
A reference is unspecified when its object identifier, and its device identifier if it has one, carry instance 4194303. A SPECIFIED member may hold one, standing for nothing to match yet. The time range may name a property of any object; a Schedule’s Present_Value is typical.
This configures the object and is not saved. With persistence, once a write has set the array and it was saved, the saved rules win: the rules given here are still checked, but not stored.
Sourcepub fn set_negative_access_rules(
&mut self,
rules: impl IntoIterator<Item = BACnetAccessRule>,
) -> Result<(), Error>
pub fn set_negative_access_rules( &mut self, rules: impl IntoIterator<Item = BACnetAccessRule>, ) -> Result<(), Error>
Replace Negative_Access_Rules, the rules that deny access, with the
same checks, and the same rule for saved rules, as
set_positive_access_rules.
Sourcepub fn positive_access_rules(&self) -> &[BACnetAccessRule]
pub fn positive_access_rules(&self) -> &[BACnetAccessRule]
The stored Positive_Access_Rules.
Sourcepub fn negative_access_rules(&self) -> &[BACnetAccessRule]
pub fn negative_access_rules(&self) -> &[BACnetAccessRule]
The stored Negative_Access_Rules.
Sourcepub fn set_accompaniment(
&mut self,
accompaniment: Option<BACnetDeviceObjectReference>,
) -> Result<(), Error>
pub fn set_accompaniment( &mut self, accompaniment: Option<BACnetDeviceObjectReference>, ) -> Result<(), Error>
Set Accompaniment (Clause 12.34.11), the object a second credential
presented with the first has to match for these rights to grant
access: an Access Rights object the second credential holds, the
Access Credential itself, or the Access User who owns it, here or in
another device. A reference whose object, and device if it names one,
carry instance 4194303 asks for no accompaniment. None leaves the
optional property out, as a new object does; once set, the property
is in Property_List and peers can write it.
Refused with VALUE_OUT_OF_RANGE, keeping the value set before: a device member that isn’t a Device (#1285), or an object of any other type unless the reference asks for no accompaniment.
This configures the object and is not saved. With persistence, once
a write has set Accompaniment and it was saved, the saved reference
wins: the one given here is still checked, but not stored, and None
leaves the property in place. To lift a saved requirement, write the
no-accompaniment reference (instance 4194303), which keeps the row;
to drop the row itself, remove the storage file, which also drops the
saved rules and Enable.
Sourcepub fn accompaniment(&self) -> Option<&BACnetDeviceObjectReference>
pub fn accompaniment(&self) -> Option<&BACnetDeviceObjectReference>
The stored Accompaniment, None while the property is left out.
Trait Implementations§
Source§impl BACnetObject for AccessRightsObject
impl BACnetObject for AccessRightsObject
Source§fn object_identifier(&self) -> ObjectIdentifier
fn object_identifier(&self) -> ObjectIdentifier
Source§fn object_name(&self) -> &str
fn object_name(&self) -> &str
Source§fn read_property(
&self,
property: PropertyIdentifier,
array_index: Option<u32>,
) -> Result<PropertyValue, Error>
fn read_property( &self, property: PropertyIdentifier, array_index: Option<u32>, ) -> Result<PropertyValue, Error>
Source§fn write_property(
&mut self,
property: PropertyIdentifier,
array_index: Option<u32>,
value: PropertyValue,
_priority: Option<u8>,
) -> Result<(), Error>
fn write_property( &mut self, property: PropertyIdentifier, array_index: Option<u32>, value: PropertyValue, _priority: Option<u8>, ) -> Result<(), Error>
Source§fn property_metadata(&self) -> Cow<'_, [PropertyMetadata]>
fn property_metadata(&self) -> Cow<'_, [PropertyMetadata]>
Source§fn property_list(&self) -> Cow<'static, [PropertyIdentifier]>
fn property_list(&self) -> Cow<'static, [PropertyIdentifier]>
Source§fn write_property_from(
&mut self,
property: PropertyIdentifier,
array_index: Option<u32>,
value: PropertyValue,
priority: Option<u8>,
_origin: &CommandOrigin,
) -> Result<(), Error>
fn write_property_from( &mut self, property: PropertyIdentifier, array_index: Option<u32>, value: PropertyValue, priority: Option<u8>, _origin: &CommandOrigin, ) -> Result<(), Error>
Source§fn is_writable_property(&self, property: PropertyIdentifier) -> bool
fn is_writable_property(&self, property: PropertyIdentifier) -> bool
property for this object. Read moreSource§fn is_array_property(&self, property: PropertyIdentifier) -> bool
fn is_array_property(&self, property: PropertyIdentifier) -> bool
property accepts an array index on this object. Read moreSource§fn is_list_property(&self, property: PropertyIdentifier) -> bool
fn is_list_property(&self, property: PropertyIdentifier) -> bool
property is a BACnetLIST on this object. Read moreSource§fn is_createable(&self) -> bool
fn is_createable(&self) -> bool
Source§fn creation_only_properties(&self) -> &'static [PropertyIdentifier]
fn creation_only_properties(&self) -> &'static [PropertyIdentifier]
Source§fn initialize_property(
&mut self,
_property: PropertyIdentifier,
_value: PropertyValue,
) -> Result<(), Error>
fn initialize_property( &mut self, _property: PropertyIdentifier, _value: PropertyValue, ) -> Result<(), Error>
Self::creation_only_properties, written whole. Read moreSource§fn is_deleteable(&self) -> bool
fn is_deleteable(&self) -> bool
Source§fn required_properties(&self) -> Cow<'static, [PropertyIdentifier]>
fn required_properties(&self) -> Cow<'static, [PropertyIdentifier]>
Source§fn supports_cov(&self) -> bool
fn supports_cov(&self) -> bool
Source§fn supports_subscribe_cov_property(&self) -> bool
fn supports_subscribe_cov_property(&self) -> bool
Source§fn supports_cov_property(&self, property: PropertyIdentifier) -> bool
fn supports_cov_property(&self, property: PropertyIdentifier) -> bool
Source§fn cov_increment(&self) -> Option<f64>
fn cov_increment(&self) -> Option<f64>
Source§fn cov_reported_properties(&self) -> &'static [CovReportedProperty]
fn cov_reported_properties(&self) -> &'static [CovReportedProperty]
Source§fn set_overridden(&mut self, _overridden: bool)
fn set_overridden(&mut self, _overridden: bool)
Source§fn evaluate_intrinsic_reporting(&mut self) -> Option<TransitionOutcome>
fn evaluate_intrinsic_reporting(&mut self) -> Option<TransitionOutcome>
Source§fn tick_intrinsic_reporting(&mut self) -> Option<TransitionOutcome>
fn tick_intrinsic_reporting(&mut self) -> Option<TransitionOutcome>
Time_Delay countdown for a pending transition. Read moreSource§fn tick_schedule(
&mut self,
_today: SpecificDate,
_time: Time,
_calendar_active: &dyn Fn(ObjectIdentifier) -> bool,
) -> Option<ScheduleWrite>
fn tick_schedule( &mut self, _today: SpecificDate, _time: Time, _calendar_active: &dyn Fn(ObjectIdentifier) -> bool, ) -> Option<ScheduleWrite>
Source§fn take_owed_schedule_writes(&mut self) -> Vec<ScheduleWrite>
fn take_owed_schedule_writes(&mut self) -> Vec<ScheduleWrite>
Source§fn complete_schedule_write(
&mut self,
_write: &ScheduleWrite,
_outcomes: &[ScheduleTargetOutcome],
) -> bool
fn complete_schedule_write( &mut self, _write: &ScheduleWrite, _outcomes: &[ScheduleTargetOutcome], ) -> bool
write, one of this schedule’s writes:
outcomes holds one entry per member of write.references, in order. Read moreSource§fn retry_refusals_naming(
&self,
_target: ObjectIdentifier,
) -> Option<ScheduleWrite>
fn retry_refusals_naming( &self, _target: ObjectIdentifier, ) -> Option<ScheduleWrite>
retry of the current value to the
references whose last write was refused and that name target, an
object just added to the database (#1440), so the refusal can clear
without waiting for the next pass. None when no such refusal
stands, or when the pass itself would retry nothing: out of service,
outside Effective_Period, or with a NULL Present_Value. Only
meaningful for Schedule objects; default returns None.Source§fn acknowledge_alarm(
&mut self,
_transition_bit: EventTransitionBits,
) -> Result<(), Error>
fn acknowledge_alarm( &mut self, _transition_bit: EventTransitionBits, ) -> Result<(), Error>
transition_bit flags in acked_transitions.
Returns Ok(()) if the object supports event detection, Err otherwise.Source§fn apply_life_safety_operation(
&mut self,
_operation: LifeSafetyOperation,
) -> Result<LifeSafetyOperationOutcome, Error>
fn apply_life_safety_operation( &mut self, _operation: LifeSafetyOperation, ) -> Result<LifeSafetyOperationOutcome, Error>
Source§fn set_life_safety_operation_expected_internal(
&mut self,
_operation: LifeSafetyOperation,
) -> Result<(), Error>
fn set_life_safety_operation_expected_internal( &mut self, _operation: LifeSafetyOperation, ) -> Result<(), Error>
Source§fn set_event_state_internal(&mut self, _state: EventState) -> Result<(), Error>
fn set_event_state_internal(&mut self, _state: EventState) -> Result<(), Error>
Event_State transition. Read moreSource§fn enrollment_eval_state_internal(&self) -> Option<EventEnrollmentEvalState>
fn enrollment_eval_state_internal(&self) -> Option<EventEnrollmentEvalState>
Source§fn set_enrollment_eval_state_internal(
&mut self,
_state: EventEnrollmentEvalState,
) -> Result<(), Error>
fn set_enrollment_eval_state_internal( &mut self, _state: EventEnrollmentEvalState, ) -> Result<(), Error>
Source§fn enrollment_eval_source_internal(
&self,
) -> Option<Option<EventEnrollmentMonitoredSource>>
fn enrollment_eval_source_internal( &self, ) -> Option<Option<EventEnrollmentMonitoredSource>>
Source§fn set_enrollment_eval_source_internal(
&mut self,
_source: Option<EventEnrollmentMonitoredSource>,
) -> Result<(), Error>
fn set_enrollment_eval_source_internal( &mut self, _source: Option<EventEnrollmentMonitoredSource>, ) -> Result<(), Error>
Source§fn set_acked_transitions_internal(
&mut self,
_transition_bit: EventTransitionBits,
_acknowledged: bool,
) -> Result<(), Error>
fn set_acked_transitions_internal( &mut self, _transition_bit: EventTransitionBits, _acknowledged: bool, ) -> Result<(), Error>
Acked_Transitions bit on a received event-state
transition. Read moreSource§fn evaluate_reliability_internal(
&mut self,
) -> Result<ReliabilityEvaluation, Error>
fn evaluate_reliability_internal( &mut self, ) -> Result<ReliabilityEvaluation, Error>
Reliability. Read moreSource§fn set_reliability_internal(
&mut self,
_reliability: Reliability,
) -> Result<(), Error>
fn set_reliability_internal( &mut self, _reliability: Reliability, ) -> Result<(), Error>
Reliability value. Read moreSource§fn set_present_value_internal(
&mut self,
_value: PropertyValue,
) -> Result<(), Error>
fn set_present_value_internal( &mut self, _value: PropertyValue, ) -> Result<(), Error>
Present_Value supplied by the local application. Read moreSource§fn set_present_value_from_internal(
&mut self,
value: PropertyValue,
_origin: &CommandOrigin,
) -> Result<(), Error>
fn set_present_value_from_internal( &mut self, value: PropertyValue, _origin: &CommandOrigin, ) -> Result<(), Error>
Source§fn set_tracking_value_internal(
&mut self,
_value: PropertyValue,
) -> Result<(), Error>
fn set_tracking_value_internal( &mut self, _value: PropertyValue, ) -> Result<(), Error>
Tracking_Value the local application derived. Read moreSource§fn report_access_input_internal(
&mut self,
_input: AccessControlInput,
) -> Result<(), Error>
fn report_access_input_internal( &mut self, _input: AccessControlInput, ) -> Result<(), Error>
AccessControlInput. Read more