RFID + Keypad entry system

Hi everyone. I'm extremely new to coding arduino but am trying my best. I created a perfectly functioning door entry system that uses RFID key tags or a password to open the door. So far it is functioning great. I created the code by stealing bits and pieces from others and modifying it to suit my needs. I want to add one function. Right now if I scan an RFID tag or enter the correct password the door opens for 3 seconds and then re-locks. What I would like to do is once the correct password is entered / keytag swiped or perhaps even before if I push the "#" key the door will unlock permanently until the "" key is pushed. So I will copy here my original code without the unlocking functionality and then I will add the code at the bottom that I started to play with. I think I know how to unlock the door based on a variable "lockState" I just don't know how to change that state based on the "" or "#" keys. Thanks for any help you may be able to lend me. I'm very new to coding but think I'm slowly picking it up...

Here is the functioning code...

#include <MFRC522.h>
#include <LiquidCrystal_I2C.h>
#include <Keypad.h>
#include <SPI.h>

LiquidCrystal_I2C lcd(0x27, 16, 2);
MFRC522 mfrc522(10, 9); // MFRC522 mfrc522(SS_PIN, RST_PIN)

constexpr uint8_t greenLed = 7;
constexpr uint8_t redLed = 6;
constexpr uint8_t relayPin = 8;
constexpr uint8_t buzzerPin = 5;
constexpr uint8_t openPin = 4;
int openState = 0;
int lockState = true;
int passwordstate = 0;
char initial_password[4] = {'1', '1', '1', '1'};  // Input desired password here
char password[4];
char key_pressed = 0;
uint8_t i = 0;
const byte rows = 4;
const byte columns = 4;
char hexaKeys[rows][columns] = {
  {'1', '2', '3', 'A'},
  {'4', '5', '6', 'B'},
  {'7', '8', '9', 'C'},
  {'*', '0', '#', 'D'}
};
byte row_pins[rows] = {A0, A1, A2, A3};
byte column_pins[columns] = {0, 1, 2, 3};
Keypad keypad_key = Keypad( makeKeymap(hexaKeys), row_pins, column_pins, rows, columns);
void setup()
{
  pinMode(buzzerPin, OUTPUT);
  pinMode(redLed, OUTPUT);
  pinMode(greenLed, OUTPUT);
  pinMode(relayPin, OUTPUT);
  pinMode(openPin, INPUT);
  digitalWrite(relayPin, HIGH);
  lcd.begin();
  lcd.backlight();
  SPI.begin();
  mfrc522.PCD_Init();
  mfrc522.PCD_SetAntennaGain(mfrc522.RxGain_max);
  lcd.clear(); //
  lcd.print("Enter Password:");
}
void loop()
{
  {
    openState = digitalRead(openPin);
    if (openState == HIGH)
    {
      lcd.clear();
      lcd.print("  DOOR OPENING");
      lcd.setCursor(0, 1);
      lcd.print("  STAND CLEAR");
      digitalWrite(greenLed, HIGH);
      digitalWrite(relayPin, LOW);
      digitalWrite(buzzerPin, HIGH);
      delay(500);
      digitalWrite(buzzerPin, LOW);
      delay(500);
      digitalWrite(buzzerPin, HIGH);
      delay(500);
      digitalWrite(buzzerPin, LOW);
      delay(3000);
      digitalWrite(greenLed, LOW);
      digitalWrite(relayPin, HIGH);
      lcd.clear();
      lcd.print("Enter Password:");
      lcd.setCursor(0, 1);
    }
  }
  {
    key_pressed = keypad_key.getKey(); // Storing keys
    if (key_pressed)
    {
      password[i++] = key_pressed; // Storing in password variable
      lcd.setCursor(0, 1);
      lcd.print("*");
      passwordstate = 1;
    }
    if ((i == 2) && (passwordstate != 2)) // If 2 keys are completed
    {
      lcd.print("*");
      passwordstate = 2;
    }
    if ((i == 3) && (passwordstate != 3)) // If 3 keys are completed
    {
      lcd.print("**");
      passwordstate = 3;
    }
    if (i == 4) // If 4 keys are completed
    {
      delay(200);
      if (!(strncmp(password, initial_password, 4))) // If password is matched
      {
        lcd.clear();
        lcd.print("Pass Accepted");
        lcd.setCursor(0, 1);
        lcd.print("Authorized");
        digitalWrite(relayPin, LOW);
        digitalWrite(greenLed, HIGH);
        digitalWrite(buzzerPin, HIGH);
        delay(500);
        digitalWrite(buzzerPin, LOW);
        delay(500);
        digitalWrite(buzzerPin, HIGH);
        delay(500);
        digitalWrite(buzzerPin, LOW);
        delay(3000);
        digitalWrite(greenLed, LOW);
        digitalWrite(relayPin, HIGH);
        lcd.clear();
        lcd.print("Enter Password:");
        lcd.setCursor(0, 1);
        i = 0;
        passwordstate = 0;
      }
      else    // If password is not matched
      {
        lcd.clear();
        lcd.print("Wrong Password");
        lcd.setCursor(0, 1);
        lcd.print("Access Denied");
        digitalWrite(buzzerPin, HIGH);
        digitalWrite(redLed, HIGH);
        delay(3000);
        digitalWrite(buzzerPin, LOW);
        digitalWrite(redLed, LOW);
        lcd.clear();
        lcd.print("Enter Password:");
        lcd.setCursor(0, 1);
        i = 0;
      }
    }
  }
  {
    // Look for new cards
    if ( ! mfrc522.PICC_IsNewCardPresent()) {
      return;
    }
    // Select one of the cards
    if ( ! mfrc522.PICC_ReadCardSerial()) {
      return;
    }
    //Reading from the card
    String tag = "";
    byte letter;
    for (byte j = 0; j < mfrc522.uid.size; j++)
    {
      tag.concat(String(mfrc522.uid.uidByte[j] < 0x10 ? " 0" : " "));
      tag.concat(String(mfrc522.uid.uidByte[j], HEX));
    }
    tag.toUpperCase();
    //Checking the card
    if (tag.substring(1) == "11 11 11 11")
    {
      lcd.clear();
      lcd.print("Tag Matched");
      lcd.setCursor(0, 1);
      lcd.print("Welcome Chelsea");
      digitalWrite(greenLed, HIGH);
      digitalWrite(relayPin, LOW);
      digitalWrite(buzzerPin, HIGH);
      delay(500);
      digitalWrite(buzzerPin, LOW);
      delay(500);
      digitalWrite(buzzerPin, HIGH);
      delay(500);
      digitalWrite(buzzerPin, LOW);
      delay(3000);
      digitalWrite(greenLed, LOW);
      digitalWrite(relayPin, HIGH);
      lcd.clear();
      lcd.print("Enter Password:");
      lcd.setCursor(0, 1);
    }
    if (tag.substring(1) == "11 11 11 11")
    {
      lcd.clear();
      lcd.print("Tag Matched");
      lcd.setCursor(0, 1);
      lcd.print("Welcome Cory");
      digitalWrite(greenLed, HIGH);
      digitalWrite(relayPin, LOW);
      digitalWrite(buzzerPin, HIGH);
      delay(500);
      digitalWrite(buzzerPin, LOW);
      delay(500);
      digitalWrite(buzzerPin, HIGH);
      delay(500);
      digitalWrite(buzzerPin, LOW);
      delay(3000);
      digitalWrite(greenLed, LOW);
      digitalWrite(relayPin, HIGH);
      lcd.clear();
      lcd.print("Enter Password:");
      lcd.setCursor(0, 1);
    }
    if (tag.substring(1) == "11 11 11 11")
    {
      lcd.clear();
      lcd.print("Tag Matched");
      lcd.setCursor(0, 1);
      lcd.print("Welcome Cory");
      digitalWrite(greenLed, HIGH);
      digitalWrite(relayPin, LOW);
      digitalWrite(buzzerPin, HIGH);
      delay(500);
      digitalWrite(buzzerPin, LOW);
      delay(500);
      digitalWrite(buzzerPin, HIGH);
      delay(500);
      digitalWrite(buzzerPin, LOW);
      delay(3000);
      digitalWrite(greenLed, LOW);
      digitalWrite(relayPin, HIGH);
      lcd.clear();
      lcd.print("Enter Password:");
      lcd.setCursor(0, 1);
    }
    if (tag.substring(1) != "11 11 11 11")
      if (tag.substring(1) != "11 11 11 11")
        if (tag.substring(1) != "11 11 11 11")
        {
          // If UID of tag is not matched.
          lcd.clear();
          lcd.setCursor(0, 0);
          lcd.print("Wrong Tag Shown");
          lcd.setCursor(0, 1);
          lcd.print("Access Denied");
          digitalWrite(buzzerPin, HIGH);
          digitalWrite(redLed, HIGH);
          delay(3000);
          digitalWrite(buzzerPin, LOW);
          digitalWrite(redLed, LOW);
          lcd.clear();
          lcd.print("Enter Password:");
          lcd.setCursor(0, 1);
        }
  }
  {
    key_pressed = keypad_key.getKey(); // Storing keys
    if (key_pressed)
    {
      password[i++] = key_pressed; // Storing in password variable
      lcd.print("*");
    }
    if (i == 4) // If 4 keys are completed
    {
      delay(200);
      if (!(strncmp(password, initial_password, 4))) // If password is matched
      {
        lcd.clear();
        lcd.print("Pass Accepted");
        lcd.setCursor(0, 1);
        lcd.print("Authorized");
        digitalWrite(relayPin, LOW);
        digitalWrite(greenLed, HIGH);
        digitalWrite(buzzerPin, HIGH);
        delay(500);
        digitalWrite(buzzerPin, LOW);
        delay(500);
        digitalWrite(buzzerPin, HIGH);
        delay(500);
        digitalWrite(buzzerPin, LOW);
        delay(500);
        digitalWrite(greenLed, LOW);
        digitalWrite(relayPin, HIGH);
        lcd.clear();
        lcd.print("Enter Password:");
        lcd.setCursor(0, 1);
        i = 0;
      }
      else    // If password is not matched
      {
        lcd.clear();
        lcd.print("Wrong Password");
        lcd.setCursor(0, 1);
        lcd.print("Access Denied");
        digitalWrite(buzzerPin, HIGH);
        digitalWrite(redLed, HIGH);
        delay(3000);
        digitalWrite(buzzerPin, LOW);
        digitalWrite(redLed, LOW);
        lcd.clear();
        lcd.print("Enter Password:");
        lcd.setCursor(0, 1);
        i = 0;
      }
    }
  }
}

Here is the code I started to play with adding a "lockState" to keep the door unlocked...

#include <MFRC522.h>
#include <LiquidCrystal_I2C.h>
#include <Keypad.h>
#include <SPI.h>

LiquidCrystal_I2C lcd(0x27, 16, 2);
MFRC522 mfrc522(10, 9); // MFRC522 mfrc522(SS_PIN, RST_PIN)

constexpr uint8_t greenLed = 7;
constexpr uint8_t redLed = 6;
constexpr uint8_t relayPin = 8;
constexpr uint8_t buzzerPin = 5;
constexpr uint8_t openPin = 4;
int openState = 0;
int lockState = true;
int passwordstate = 0;
char initial_password[4] = {'1', '1', '1', '1'};  // Input desired password here
char password[4];
char key_pressed = 0;
uint8_t i = 0;
const byte rows = 4;
const byte columns = 4;
char hexaKeys[rows][columns] = {
  {'1', '2', '3', 'A'},
  {'4', '5', '6', 'B'},
  {'7', '8', '9', 'C'},
  {'*', '0', '#', 'D'}
};
byte row_pins[rows] = {A0, A1, A2, A3};
byte column_pins[columns] = {0, 1, 2, 3};
Keypad keypad_key = Keypad( makeKeymap(hexaKeys), row_pins, column_pins, rows, columns);
void setup()
{
  pinMode(buzzerPin, OUTPUT);
  pinMode(redLed, OUTPUT);
  pinMode(greenLed, OUTPUT);
  pinMode(relayPin, OUTPUT);
  pinMode(openPin, INPUT);
  digitalWrite(relayPin, HIGH);
  lcd.begin();
  lcd.backlight();
  SPI.begin();
  mfrc522.PCD_Init();
  mfrc522.PCD_SetAntennaGain(mfrc522.RxGain_max);
  lcd.clear(); //
  lcd.print("Enter Password:");
}
void loop()
{
  if (lockState = false)
  {
    digitalWrite(greenLed, HIGH);
    lcd.clear();
    lcd.print("DOOR UNLOCKED");
    lcd.setCursor(0, 1);
    lcd.print("PUSH * TO LOCK");
    digitalWrite(greenLed, HIGH);
    digitalWrite(relayPin, LOW);
  }
  if (lockState == true)
  {
    {
      openState = digitalRead(openPin);
      if (openState == HIGH)
      {
        lcd.clear();
        lcd.print("  DOOR OPENING");
        lcd.setCursor(0, 1);
        lcd.print("  STAND CLEAR");
        digitalWrite(greenLed, HIGH);
        digitalWrite(relayPin, LOW);
        digitalWrite(buzzerPin, HIGH);
        delay(500);
        digitalWrite(buzzerPin, LOW);
        delay(500);
        digitalWrite(buzzerPin, HIGH);
        delay(500);
        digitalWrite(buzzerPin, LOW);
        delay(3000);
        digitalWrite(greenLed, LOW);
        digitalWrite(relayPin, HIGH);
        lcd.clear();
        lcd.print("Enter Password:");
        lcd.setCursor(0, 1);
      }
    }
    {
      key_pressed = keypad_key.getKey(); // Storing keys
      if (key_pressed)
      {
        password[i++] = key_pressed; // Storing in password variable
        lcd.setCursor(0, 1);
        lcd.print("*");
        passwordstate = 1;
      }
      if ((i == 2) && (passwordstate != 2)) // If 2 keys are completed
      {
        lcd.print("*");
        passwordstate = 2;
      }
      if ((i == 3) && (passwordstate != 3)) // If 3 keys are completed
      {
        lcd.print("**");
        passwordstate = 3;
      }
      if (i == 4) // If 4 keys are completed
      {
        delay(200);
        if (!(strncmp(password, initial_password, 4))) // If password is matched
        {
          lcd.clear();
          lcd.print("Pass Accepted");
          lcd.setCursor(0, 1);
          lcd.print("Authorized");
          digitalWrite(relayPin, LOW);
          digitalWrite(greenLed, HIGH);
          digitalWrite(buzzerPin, HIGH);
          delay(500);
          digitalWrite(buzzerPin, LOW);
          delay(500);
          digitalWrite(buzzerPin, HIGH);
          delay(500);
          digitalWrite(buzzerPin, LOW);
          delay(3000);
          digitalWrite(greenLed, LOW);
          digitalWrite(relayPin, HIGH);
          lcd.clear();
          lcd.print("Enter Password:");
          lcd.setCursor(0, 1);
          i = 0;
          passwordstate = 0;
        }
        else    // If password is not matched
        {
          lcd.clear();
          lcd.print("Wrong Password");
          lcd.setCursor(0, 1);
          lcd.print("Access Denied");
          digitalWrite(buzzerPin, HIGH);
          digitalWrite(redLed, HIGH);
          delay(3000);
          digitalWrite(buzzerPin, LOW);
          digitalWrite(redLed, LOW);
          lcd.clear();
          lcd.print("Enter Password:");
          lcd.setCursor(0, 1);
          i = 0;
        }
      }
    }
    {
      // Look for new cards
      if ( ! mfrc522.PICC_IsNewCardPresent()) {
        return;
      }
      // Select one of the cards
      if ( ! mfrc522.PICC_ReadCardSerial()) {
        return;
      }
      //Reading from the card
      String tag = "";
      byte letter;
      for (byte j = 0; j < mfrc522.uid.size; j++)
      {
        tag.concat(String(mfrc522.uid.uidByte[j] < 0x10 ? " 0" : " "));
        tag.concat(String(mfrc522.uid.uidByte[j], HEX));
      }
      tag.toUpperCase();
      //Checking the card
      if (tag.substring(1) == "11 11 11 11")
      {
        lcd.clear();
        lcd.print("Tag Matched");
        lcd.setCursor(0, 1);
        lcd.print("Welcome Chelsea");
        digitalWrite(greenLed, HIGH);
        digitalWrite(relayPin, LOW);
        digitalWrite(buzzerPin, HIGH);
        delay(500);
        digitalWrite(buzzerPin, LOW);
        delay(500);
        digitalWrite(buzzerPin, HIGH);
        delay(500);
        digitalWrite(buzzerPin, LOW);
        delay(3000);
        digitalWrite(greenLed, LOW);
        digitalWrite(relayPin, HIGH);
        lcd.clear();
        lcd.print("Enter Password:");
        lcd.setCursor(0, 1);
      }
      if (tag.substring(1) == "11 11 11 11")
      {
        lcd.clear();
        lcd.print("Tag Matched");
        lcd.setCursor(0, 1);
        lcd.print("Welcome Cory");
        digitalWrite(greenLed, HIGH);
        digitalWrite(relayPin, LOW);
        digitalWrite(buzzerPin, HIGH);
        delay(500);
        digitalWrite(buzzerPin, LOW);
        delay(500);
        digitalWrite(buzzerPin, HIGH);
        delay(500);
        digitalWrite(buzzerPin, LOW);
        delay(3000);
        digitalWrite(greenLed, LOW);
        digitalWrite(relayPin, HIGH);
        lcd.clear();
        lcd.print("Enter Password:");
        lcd.setCursor(0, 1);
      }
      if (tag.substring(1) == "11 11 11 11")
      {
        lcd.clear();
        lcd.print("Tag Matched");
        lcd.setCursor(0, 1);
        lcd.print("Welcome Cory");
        digitalWrite(greenLed, HIGH);
        digitalWrite(relayPin, LOW);
        digitalWrite(buzzerPin, HIGH);
        delay(500);
        digitalWrite(buzzerPin, LOW);
        delay(500);
        digitalWrite(buzzerPin, HIGH);
        delay(500);
        digitalWrite(buzzerPin, LOW);
        delay(3000);
        digitalWrite(greenLed, LOW);
        digitalWrite(relayPin, HIGH);
        lcd.clear();
        lcd.print("Enter Password:");
        lcd.setCursor(0, 1);
      }
      if (tag.substring(1) != "11 11 11 11")
        if (tag.substring(1) != "11 11 11 11")
          if (tag.substring(1) != "11 11 11 11")
          {
            // If UID of tag is not matched.
            lcd.clear();
            lcd.setCursor(0, 0);
            lcd.print("Wrong Tag Shown");
            lcd.setCursor(0, 1);
            lcd.print("Access Denied");
            digitalWrite(buzzerPin, HIGH);
            digitalWrite(redLed, HIGH);
            delay(3000);
            digitalWrite(buzzerPin, LOW);
            digitalWrite(redLed, LOW);
            lcd.clear();
            lcd.print("Enter Password:");
            lcd.setCursor(0, 1);
          }
    }
    {
      key_pressed = keypad_key.getKey(); // Storing keys
      if (key_pressed)
      {
        password[i++] = key_pressed; // Storing in password variable
        lcd.print("*");
      }
      if (i == 4) // If 4 keys are completed
      {
        delay(200);
        if (!(strncmp(password, initial_password, 4))) // If password is matched
        {
          lcd.clear();
          lcd.print("Pass Accepted");
          lcd.setCursor(0, 1);
          lcd.print("Authorized");
          digitalWrite(relayPin, LOW);
          digitalWrite(greenLed, HIGH);
          digitalWrite(buzzerPin, HIGH);
          delay(500);
          digitalWrite(buzzerPin, LOW);
          delay(500);
          digitalWrite(buzzerPin, HIGH);
          delay(500);
          digitalWrite(buzzerPin, LOW);
          delay(500);
          digitalWrite(greenLed, LOW);
          digitalWrite(relayPin, HIGH);
          lcd.clear();
          lcd.print("Enter Password:");
          lcd.setCursor(0, 1);
          i = 0;
        }
        else    // If password is not matched
      }
    }
  }
}

I’m just curious. Can someone explain the following if statement...

if (!(strncmp(password, initial_password, 4))) // If password is matched

I stole it from someone else I just don’t understand what’s happening in it. The brackets and explanation point is confusing me. Thanks in advance. I realize it’s a string compare just the brackets and location of the explanation point are confusing me.