GD USER
Материал из GedeminWiki
Версия от 20:11, 10 мая 2007; SYSDBA (обсуждение | вклад)
CREATE TABLE gd_user
(
id dintkey, /* Первичный ключ */
name dusername, /* имя */
passw dpassword, /* пароль */
ingroup dinteger DEFAULT 1 NOT NULL, /* группы, в которые входит пользователь */
fullname dtext180, /* полное имя */
description dtext180, /* описание */
ibname dusername, /* имя пользователя IB */
ibpassword dpassword, /* пароль IB */
contactkey dintkey, /* ссылка на запись в таблице контактов */
externalkey dforeignkey, /* внешняя ссылка, например на справочник сотрудников*/
disabled dboolean DEFAULT 0 NOT NULL, /* отключен */
lockedout dboolean DEFAULT 0, /* запись заблокирована */
mustchange dboolean DEFAULT 0, /* при входе пользователь должен изменить пароль */
cantchangepassw dboolean DEFAULT 1, /* пользователь не может менять пароль */
passwneverexp dboolean DEFAULT 1, /* срок действия пароля никогда не истекает */
expdate ddate, /* дата истечения срока действия пароля */
workstart dtime, /* начало рабочего дня */
workend dtime, /* окончание рабочего дня */
allowaudit dallowaudit, /* будут ли операции этого пользователя заноситься */
/* в журнал */
editiondate deditiondate,
editorkey dforeignkey,
icon dinteger, /* пиктограмка для данного пользователя */
reserved dinteger, /* зарезервировано */
CHECK (((workstart IS NULL) AND (workend IS NULL)) OR (workstart < workend)),
CHECK (ingroup <> 0)
);
ALTER TABLE gd_user ADD CONSTRAINT gd_pk_user
PRIMARY KEY (id);
/* имя пользователя должно быть уникальным */
CREATE UNIQUE ASC INDEX gd_x_user_name ON gd_user
(name);
CREATE UNIQUE INDEX gd_x_user_ibname ON
gd_user (ibname);
SET TERM ^ ;
CREATE TRIGGER gd_bi_user FOR gd_user
BEFORE INSERT
POSITION 0
AS
BEGIN
IF (NEW.ID IS NULL) THEN
NEW.ID = GEN_ID(gd_g_unique, 1) + GEN_ID(gd_g_offset, 0);
/* значения по умолчанию */
IF (NEW.ingroup IS NULL) THEN
NEW.ingroup = 0;
IF (NEW.disabled IS NULL) THEN
NEW.disabled = 0;
IF (NEW.mustchange IS NULL) THEN
NEW.mustchange = 0;
IF (NEW.cantchangepassw IS NULL) THEN
NEW.cantchangepassw = 1;
IF (NEW.passwneverexp IS NULL) THEN
NEW.passwneverexp = 1;
IF (NEW.lockedout IS NULL) THEN
NEW.lockedout = 0;
END
^
CREATE EXCEPTION gd_e_invaliduserupdate 'At least one user must be enabled'^
CREATE TRIGGER gd_bu_user FOR gd_user
BEFORE UPDATE
POSITION 0
AS
BEGIN
IF ((NEW.disabled = 1) AND (OLD.disabled = 0) AND
(SINGULAR (SELECT * FROM gd_user WHERE disabled = 0))) THEN
EXCEPTION gd_e_invaliduserupdate;
END
^
CREATE EXCEPTION gd_e_invaliduserdelete 'Cannt delete all users'^
CREATE TRIGGER gd_bd_user FOR gd_user
BEFORE DELETE
POSITION 0
AS
BEGIN
/* выдаліць адміністратара немагчыма */
IF (OLD.ID = 150001) THEN
EXCEPTION gd_e_invaliduserdelete;
END
^
SET TERM ; ^