Hi Adrian,

thanks for the feedback.

regards Malcolm Edgar

On Thu, Mar 6, 2008 at 6:14 PM, Adrian Wiesmann <[EMAIL PROTECTED]> wrote:
> Hello Malcolm, hello list
>
>
>  > Does anyone have any good Cayenne patterns for applying data security
>  > in queries.  The scenario I am talking about is where you have a
>  > client which only has access to certain records in a table, so when
>  > the query the table they should only see their records.  Similar
>  > concept to Oracles Find Grained Access Control (FGAC).
>
>  I am implementing something very similar to the Oracle FGAC way. But I
>  added the table model pattern to Cayenne to do so.
>
>  So in my architecture I renamed the Cayenne DataObject to DataRow. I then
>  introduced a DataTable to every DataRow. DataTables contain all logic
>  related to retrieving and persisting data of one table in the database.
>  DataRows are therefor "dumbed down" as they just contain logic related to
>  one record.
>
>  Let's say I have a Painting table. Then I generate a PaintingDataRow and a
>  PaintingDataTable class. In my PaintingDataTable I then implement the
>  logic to retrieve Painting records:
>
>  PaintingDataTable.getAllPaintings();
>  PaintingDataTable.getByForeignKey(keyArtist);
>
>  within these methods I then implement the access logic based on the
>  Session information. Based on the role information of the currently logged
>  in user I add some Where statements to the standard select statements.
>  Pseudo code:
>
>  PaintingDataTable.getAllPaintings()
>  {
>    select = "SELECT * FROM PAINTING";
>    if(!user.isAdmin())
>    {
>       select += "WHERE USER IS ALLOWED TO SEE PAINTING";
>    }
>  }
>
>  This architecture works quite good since all data retrieval is done via
>  the DataTables. And the DataTables enforce the access logic. It even has
>  the added value of having all retrieve logic in one place and not
>  everywhere in the code.
>
>  Actually the architecture is a little bit more complex (DataContainer,
>  Session, etc adding to the mess). But you should get the point. :)
>
>  Cheers,
>  Adrian
>

Reply via email to