WWIV now supports a simple expression language for supporting a basic Access Control System (ACS) to allow more fine grained access primitives for users on the BBS.
WWIV's ACS suppors the following objects:
|User||Provides attributes about the current user|
|System||Provides attributes about the bbs|
The ACS language allows conditional attribute-based access control for WWIV BBS system
resources, such as message areas, conferences, file areas, chains, and menu items.
This allows the system to specify the conditions in a free-form DSL language that determines if access is granted.
WWIV's ACS grammar is comprised of:
- Comparison Operators
- Logical Operators
- Object Attributes
ACS support the following datatypes:
|Number||An integer value of 32 bits in size|
|String||A variable length set of CP437 characters|
|Boolean||Support either true of false. Convertible to Numbers as 0 and 1|
|Ar||Contains the set of Ar values, supports equality checks against single Ar value specified as a string or character.|
OP ::= COMPARE_OP | LOGICAL_OP
Only Binary Operators are supported in ACS. The operators may be either a comparison operator or a logical operator.
LHS COMPARE_OP RHS
Comparison Operators are binary operators that compare the values of both operands and return a true or false boolean value.
WWIV ACS supports the following Comparison Operators with
LHS as the Left
Hand Side operand and
RHS as the right hand side operand:
||True if LHS > RHS|
|Greater Than or Equal||
||True if LHS >= RHS|
||True if LHS < RHS|
|Less Than or Equal||
||True if LHS <= RHS|
||True if LHS == RHS|
||True if LHS != RHS|
user.sl > 100
LHS LOGICAL_OP RHS
The name logical comes from boolean logic, although the operands on either side of the operator may be an expression or type that evaluates independently to a boolean.
WWIV ACS supports the following Logical Operators:
||Both operands must evaluate to true for the result to be true.|
||At least one operand must evaluate to true for the result to be true.|
user.sl > 100 || user.ar == 'A'
OP ::= COMPARE_OP | LOGICAL_OP EXPRESSION ::= EXPRESSION (OP EXPRESSION)?
The language is designed to evaluate a single expression. An expression may be
a compound expression with multiple expressions combined using logical
&& or OR
WWIV ACS supports attributes in the form
Object.Attribute. For example "user.sl" is the current user's security level.
Note: Object and attribute names are case-insensitive, so both
USER.NAME are equivalent.
|user.sl||User's message area security level|
|user.dsl||User's download area security level|
|user.ar||Users' download area Access Rights/Flag|
|user.dar||Users' download area Access Rights|
|user.name||User's name or handle (not real name)|
Grant access to users with SL of 100 or more or AR of 'A':
user.sl >= 100 || user.ar == 'A'
Grant access to users with SL of 20 or less, and also to Rushfan.
user.sl <= 20 || user.name == "Rushfan"