wiki:Trigger7

Version 1 (modified by 235018, 25 hours ago) ( diff )

--

Validation of employee authorization before making a product change

Description

This trigger verifies that a member of the personnel has the required authorization before they are allowed to make a change to a product.

The makes_change relationship contains information about the permission, type, and authorization associated with a product change. The trigger compares the authorization provided for the change with the authorization of the employee recorded in PERSONAL.

If the employee does not have the required authorization, the change is rejected.

Tables involved

  • Personal
  • Change
  • makes_change

Type of trigger

  • BEFORE INSERT
  • BEFORE UPDATE

Activated on the makes_change table.

SQL Code

CREATE OR REPLACE FUNCTION validate_employee_authorization() 
RETURNS TRIGGER 
LANGUAGE plpgsql 
AS $$ 
DECLARE v_authorisation TEXT; 
BEGIN 
    -- Get the employee's authorization 
    SELECT authorisation 
    INTO v_authorisation 
    FROM personal 
    WHERE id = NEW.id; 
    -- Check whether the employee exists 
    IF v_authorisation IS NULL THEN 
        RAISE EXCEPTION 'Employee % does not have valid authorization.', NEW.id; 
    END IF; 
    -- Check whether the authorization matches 
    IF NEW.authorisation IS DISTINCT FROM v_authorisation THEN 
        RAISE EXCEPTION 'Employee % is not authorized to make this product change.', NEW.id; 
    END IF; 
    RETURN NEW; 
END; 
$$; 


CREATE TRIGGER trg_validate_employee_authorization 
BEFORE INSERT OR UPDATE 
ON makes_change 
FOR EACH ROW 
EXECUTE FUNCTION validate_employee_authorization();

Logic explanation

Before a record is inserted or updated in makes_change, the trigger:

1. Identifies the employee using NEW.id. 2. Retrieves the employee's authorization from PERSONAL. 3. Checks whether the employee has valid authorization. 4. Compares it with the authorization specified for the product change. 5. If the authorization matches, the operation continues. 6. If it does not match, the database raises an exception and rejects the change.

Reason for trigger

This trigger is useful because:

  • It prevents unauthorized personnel from modifying products.
  • It enforces access-control rules at the database level.
  • It protects product information from unauthorized changes.
  • It prevents the application from bypassing authorization rules.
  • It centralizes authorization validation in the database.
Note: See TracWiki for help on using the wiki.