[AccessD] Presentation Level Security System

jwcolby jwcolby at colbyconsulting.com
Fri Aug 20 21:56:02 CDT 2010


Guys,

I finally have a client specifically asking for my Presentation Level Security System (PLSS) so I am 
in active development.  I previously called PLSS my Lightweight Security System and you may remember 
other emails regarding that.

I am writing a document which discuses how I intend to implement the PLSS.  I am pasting it here to 
get comments on my ideas and have a discussion on how you might implement such a thing.  I know many 
people have "rolled your own".  Feedback is encouraged.

The idea is to have security information about form and control properties stored in tables (table 
driven) so that it can be easily setup and changed as the needs change, and reported in security 
reports.

Here is the document as it exists so far.

 >>>>>>>

Presentation Level Security System (PLSS)
Microsoft Access provides very little in the way of security for the applications that you develop. 
  I have always “rolled my own” security at the presentation level so that, for example, a specific 
form could only be opened by a specific group or groups of people.

Examples of how security might be used include:

Selectively allowing groups to open forms, and add / delete / modify records in forms.  For example 
one group might be denied the ability to even open a form.  Another two groups might be allowed to 
view the data in a form but not edit the data, add or delete records.  One specific group might be 
allowed to view, add, delete and modify the data.

In other cases you might want to control access to specific controls on a form.  Perhaps only one 
specific group is allowed to see a specific control on a form, for all other groups the control 
would be invisible.

In order to control access to data at the presentation level we need to define and implement code 
for specific objects in the database.  The objects that we will start with will be users, groups, 
forms and controls.  PLSS provides a means of specifying which groups contain which users.

Security Rules

The first question that has to be answered is where the security information is stored for a given 
application.  All code will be stored out in our mda library which can be turned into an mde if 
desired.  The problem is that the security information about the application’s forms and controls 
has to be available to the code that is trying to apply security.  Access (DAO) expects that the 
data in queries and tables be native to the application or linked from somewhere.  While we could 
place this information in tables in the mda (library), this causes immediate issues getting at the 
data, but more importantly it can cause issues with multiple applications using the same table etc. 
  If we store the data outside of the FE then we have the issue of getting at the data from the 
application.  If we link the data then it is available to be modified by a malicious user who 
manages to get at the table.

We have to put it somewhere however so we are going to start with the security information in usys 
tables in the application FE itself.  Any table with a usys prefix will not be displayed if the View 
System Objects property in the database is set to false.  Uncheck Options / View / System Objects to 
cause any such objects to not appear in the database window.  Likewise we will set the Hidden 
property to true for all of the usysPL objects.  In the database window right click the object and 
set Hidden attribute.  Then uncheck Options / View / Hidden options.  Obviously this implies that 
the user is not given access to the Tools menu in the database to prevent them from playing with 
these properties and getting to see these hidden usys objects.

The next question we have to answer is what the security rules are.  Do we allow functionality by 
default or do we deny functionality by default.  Because we intend to apply security to an existing 
working application, in general we need to begin allowing functionality.  As strange as that sounds, 
allowing functionality to one or more groups effectively denies functionality to all the other groups.

For example, by default all forms allow all users to do whatever they want.  They can open any form, 
can add, delete and modify records, and can see, enter and edit all controls.

In order to apply security to the application we would start by allowing some privilege to one or 
more groups.  Security is applied on a property by property basis, so as a form opens, the rules for 
that form are looked up.  If no security is found, then the form and control properties are left at 
whatever state they are currently in.  If specific security information is found for that form or 
control, that security is applied.

For example a form has no visible property.  We emulate that (kind of) by preventing the form from 
opening.  We have to specifically apply security in this case, and then check the security in the 
form’s OnOpen event.  If the form is not allowed to open, then a message is displayed and the form 
closes back down.

The form does have properties for AllowAdd, AllowDelete and AllowEdit.  In design view these 
properties can be set false (do not allow that action) or true (allow that action), and when the 
form opens, the form will follow the dictates of those properties.  Our security will specifically 
set the state to true (allow) for a given property for a given form / control for a specific set of 
groups.  So in order to allow a specific group to add records, you would set that AllowAdd property 
to false in design view of the form and then set security to allow specific groups to add records.

In fact, once security is set for a given property, the default for that property becomes false.  So 
whether or not you set the AllowAdd to false in design view, if you set the security system to allow 
a specific group to AllowAdd, all other groups would be denied add privileges.    On the other hand, 
if the AllowAdd property is set true by default in design view, then if no group is specifically 
given AllowAdd privilages, anyone could add records through that form.  Thus by setting the property 
to false in design view, AllowAdd privileges are denied by default to all users.

Users - usystblPLSUsers

Users are the people allowed to use an application.  There is a record in usystblPLSUsers for each 
person in the company that is allowed to use a specific application.  Having a record in the table 
does not allow or deny that person any specific rights in the application, it simply tells the 
system that the person exists.

Groups – usystblPLSGroups

Groups are the method of organizing people such that that entire group of people can do something. 
Groups have names, but they do not inherently have any privileges in the application.  A group might 
be a department such as “Accounting” or a title such as “supervisor” or manager, or even a 
functionality such as “car owner”.  Each company decides what their groups should be called based on 
how they need to group people to allow or deny access to data.

At some point, groups will be used to allow or deny access to some property of some form(s) or 
control(s).  Rules such as “the accounting group can open frmAccounting switchboard” will be created 
using a wizard in the PLS system.

UsersInGroups

Users are placed into and removed from groups using a wizard in the PLSS.  Belonging to a group is 
the only way to specifically set that user to have some specific right in PLSS.

Forms

It is important to remember that simply having a user in PLSS or having the user assigned to a group 
in PLSS does not give that user or that group privileges.

Forms have several properties used to control security for the form.  Whether the property is set 
False or True in design view, that setting applies to all users until PLSS specifically sets one or 
more groups to have that privilege, at which point all other groups no longer have that privilege.

Privileges are assigned to specific form or control objects using a PLSS wizard.  Once a group is 
given a specific right using that wizard, then and only then does that group have the right to 
perform that action, and even then only to the form or control objects initialized using the PLSS. 
Once any groups are given specific rights, all other groups not specifically assigned those rights 
are denied those rights.

Visible (can open)

There is no specific Visible property for a form, i.e. if a form can be opened, it is visible.  Thus 
by definition all forms can be opened by anyone until they are specifically allowed to be opened by 
one or more specific groups, at which time that form can no longer be opened by anyone other than 
the groups given that privilege.

AllowAdd

Set True, allows records to be added to the dataset (for bound forms).  For unbound, would just be a 
form property used by the unbound framework to allow / deny adding data.

Set to a default state in design view and that state controls security for all users until a 
specific group or groups are given rights to that property. At which time all other groups are 
denied rights to that property.

AllowDelete

Set True, allows records to be deleted from the dataset (for bound forms).  For unbound, would just 
be a form property used by the unbound framework to allow / deny deleting data.

Set to a default state in design view and that state controls security for all users until a 
specific group or groups are given rights to that property. At which time all other groups are 
denied rights to that property.

AllowEdit

Set True, allows records to be edited in the dataset (for bound forms).  For unbound, would just be 
a form property used by the unbound framework to allow / deny editing data.

Set to a default state in design view and that state controls security for all users until a 
specific group or groups are given rights to that property. At which time all other groups are 
denied rights to that property.


Controls

In general, controls have three properties that we will manipulate to control security for the 
control.  Whether the property is set False or True in design view, that setting applies to all 
users until PLSS specifically sets one or more groups to have that privilege, at which point all 
other groups no longer have that privilege.

Visible

All controls have a visible property.  Set True, the control is visible.

Set to a default state in design view and that state controls security for all users until a 
specific group or groups are given rights to that property. At which time all other groups are 
denied rights to that property.

Locked

The locked property prevents a user from entering data into a control.  For example a text box can 
accept text if Locked is true but cannot accept data if Locked is false.

All data controls have a locked property.  Buttons do not.

Set to a default state in design view and that state controls security for all users until a 
specific group or groups are given rights to that property. At which time all other groups are 
denied rights to that property.

Enabled

All controls have an Enabled property.  Set True, the enabled property allows a control to get the 
focus.

Set to a default state in design view and that state controls security for all users until a 
specific group or groups are given rights to that property. At which time all other groups are 
denied rights to that property.



-- 
John W. Colby
www.ColbyConsulting.com



More information about the AccessD mailing list