(*
* <COPYRIGHT>
* Copyright 2003 Gerd Stolpmann
*
* <GPL>
* This file is part of WTimer.
*
* WTimer is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* WTimer is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with WDialog; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* </>
*)
(* $Id: db_ac.ml,v 1.2 2003/03/23 11:59:13 gerd Exp $
* ----------------------------------------------------------------------
*
*)
module Types = struct
type login_name = Db.Types.user_name
exception Permission_denied
end
module User = struct
open Types
open Db.Types
open Db.Connection
let list db login = Db.User.list db
let get db login name = Db.User.get db name
let exists db login name = Db.User.exists db name
let insert db login user =
let luser = Db.User.get db login in
if not luser.u_admin then raise Permission_denied;
Db.User.insert db user
let update db login user =
let luser = Db.User.get db login in
if not luser.u_admin && login <> user.u_name then raise Permission_denied;
if not luser.u_admin && user.u_admin then raise Permission_denied;
Db.User.update db user
let delete db login name =
let luser = Db.User.get db login in
if not luser.u_admin && login <> name then raise Permission_denied;
Db.User.delete db name
end
module Instance = struct
open Types
open Db.Types
open Db.Connection
let list db login = Db.Instance.list db
let get db login name = Db.Instance.get db name
let exists db login name = Db.Instance.exists db name
let insert db login inst =
Db.Instance.insert db inst;
Db.Permission.update db { p_instance = inst.i_name;
p_set = [ login, `Owner ];
}
let update db login inst =
let luser = Db.User.get db login in
if not luser.u_admin &&
not (Db.Permission.check db inst.i_name login `Owner) then
raise Permission_denied;
Db.Instance.update db inst
let delete db login name =
let luser = Db.User.get db login in
if not luser.u_admin &&
not (Db.Permission.check db name login `Owner) then
raise Permission_denied;
Db.Instance.delete db name
end
module Permission = struct
open Types
open Db.Types
open Db.Connection
let get db login name =
let luser = Db.User.get db login in
if not luser.u_admin &&
not (Db.Permission.check db name login `Owner) then
raise Permission_denied;
Db.Permission.get db name
let update db login p =
let luser = Db.User.get db login in
if not luser.u_admin &&
not (Db.Permission.check db p.p_instance login `Owner) then
raise Permission_denied;
Db.Permission.update db p
end
module Entry = struct
open Types
open Db.Types
open Db_types.Types
open Db.Connection
let list db login name from_date to_date =
if not (Db.Permission.check db name login `Read) then
raise Permission_denied;
Db.Entry.list db name from_date to_date
let get db login name date =
if not (Db.Permission.check db name login `Read) then
raise Permission_denied;
Db.Entry.get db name date
let update db login day =
if not (Db.Permission.check db day.d_instance login `Read) then
raise Permission_denied;
Db.Entry.update db day
end
(* ======================================================================
* History:
*
* $Log: db_ac.ml,v $
* Revision 1.2 2003/03/23 11:59:13 gerd
* GPL
*
* Revision 1.1 2003/01/16 00:31:10 gerd
* Initial revision.
*
*
*)