mirror of
https://gitlab.com/MoonTestUse1/AdministrationItDepartmens.git
synced 2025-08-14 00:25:46 +02:00
89 lines
2.2 KiB
PL/PgSQL
89 lines
2.2 KiB
PL/PgSQL
/*
|
|
# Fix database constraints and password validation
|
|
|
|
1. Changes
|
|
- Add password validation function
|
|
- Add employee creation function with validation
|
|
- Add indexes for performance optimization
|
|
- Update RLS policies
|
|
|
|
2. Security
|
|
- Maintain RLS policies
|
|
- Add proper validation for passwords
|
|
*/
|
|
|
|
-- Update password validation function
|
|
CREATE OR REPLACE FUNCTION validate_password(password text)
|
|
RETURNS boolean
|
|
LANGUAGE plpgsql
|
|
AS $$
|
|
BEGIN
|
|
IF length(password) < 6 THEN
|
|
RAISE EXCEPTION 'Password must be at least 6 characters long';
|
|
END IF;
|
|
RETURN true;
|
|
END;
|
|
$$;
|
|
|
|
-- Update create_employee function to use password validation
|
|
CREATE OR REPLACE FUNCTION create_employee(
|
|
p_first_name text,
|
|
p_last_name text,
|
|
p_department text,
|
|
p_password text
|
|
)
|
|
RETURNS employees
|
|
LANGUAGE plpgsql
|
|
SECURITY DEFINER
|
|
AS $$
|
|
DECLARE
|
|
v_employee employees;
|
|
BEGIN
|
|
-- Validate password
|
|
PERFORM validate_password(p_password);
|
|
|
|
-- Create employee
|
|
INSERT INTO employees (
|
|
first_name,
|
|
last_name,
|
|
department,
|
|
password_hash
|
|
) VALUES (
|
|
p_first_name,
|
|
p_last_name,
|
|
p_department,
|
|
hash_password(p_password)
|
|
)
|
|
RETURNING * INTO v_employee;
|
|
|
|
RETURN v_employee;
|
|
END;
|
|
$$;
|
|
|
|
-- Add indexes for better performance if they don't exist
|
|
CREATE INDEX IF NOT EXISTS idx_employees_last_name ON employees(last_name);
|
|
CREATE INDEX IF NOT EXISTS idx_support_requests_created_at ON support_requests(created_at DESC);
|
|
|
|
-- Update RLS policies for support_requests
|
|
DROP POLICY IF EXISTS "Users can create their own requests" ON support_requests;
|
|
DROP POLICY IF EXISTS "Users can view their own requests" ON support_requests;
|
|
DROP POLICY IF EXISTS "Users can update their own requests" ON support_requests;
|
|
|
|
CREATE POLICY "Employees can create their own requests"
|
|
ON support_requests
|
|
FOR INSERT
|
|
TO authenticated
|
|
WITH CHECK (user_id = auth.uid());
|
|
|
|
CREATE POLICY "Employees can view their own requests"
|
|
ON support_requests
|
|
FOR SELECT
|
|
TO authenticated
|
|
USING (user_id = auth.uid());
|
|
|
|
CREATE POLICY "Employees can update their own requests"
|
|
ON support_requests
|
|
FOR UPDATE
|
|
TO authenticated
|
|
USING (user_id = auth.uid())
|
|
WITH CHECK (user_id = auth.uid()); |