wiki:UseCase001

Version 2 (modified by 233149, 2 weeks ago) ( diff )

--

UC001 - Најава во системот

Иницијален актер: Посетител

Други актери: -

Посетителот сака да се автентицира со е-пошта и лозинка и да добие пристап до функционалностите наменети за неговата улога. Целта е издаден пристапен токен со кој сите останати случаи на употреба знаат кој е корисникот и што смее да прави.

Сценарио

  1. Посетителот ја отвора почетната страница и ги внесува е-поштата и лозинката.
  1. Системот го бара корисникот по е-пошта. Колоната email има ограничување UNIQUE, па барањето враќа најмногу еден ред.
    SELECT id, email, password, role
    FROM project.users
    WHERE email = 'stefan.saveski@students.finki.ukim.mk';
    
  1. Ако не е пронајден корисник, системот прикажува иста порака како и при погрешна лозинка, за да не се открие кои е-пошти постојат во системот.
  1. Системот ја споредува внесената лозинка со зачуваниот BCrypt hash. Споредбата се врши во апликацијата, бидејќи во базата се чува само hash-от.
  1. Ако лозинката е точна, системот издава пристапен токен (JWT) кој ги содржи идентификаторот, е-поштата и улогата на корисникот.
  1. Ако корисникот побарал да остане најавен, системот запишува и токен за освежување.
    INSERT INTO project.token (user_id, token, expires_at, is_valid)
    VALUES (1, 'BCfXBUR-Q2E7Vkglwh5OmdbhHH0MS-askSO8M0W6sRk', now() + interval '1 month', TRUE);
    
  1. Системот го пренасочува корисникот според улогата: студентите кон студентскиот дел, професорите кон професорскиот.
  1. При подоцнежно освежување на сесијата, системот го проверува токенот за освежување.
    SELECT t.id, t.user_id, u.email, u.role
    FROM project.token t
    JOIN project.users u ON u.id = t.user_id
    WHERE t.token = 'BCfXBUR-Q2E7Vkglwh5OmdbhHH0MS-askSO8M0W6sRk'
      AND t.is_valid = TRUE
      AND t.expires_at > now();
    
  1. При одјава, системот го поништува токенот без да го брише, за да остане трага.
    UPDATE project.token
    SET is_valid = FALSE
    WHERE user_id = 1 AND is_valid = TRUE;
    

Алтернативни текови

  • 3а. Непостоечка е-пошта или погрешна лозинка - системот прикажува општа порака за неуспешна најава.
  • 8а. Токенот е истечен или поништен - барањето не враќа ниту еден ред и корисникот мора повторно да се најави.

Забелешки

  • Улогата се чува како набројувачки тип user_role со вредности 'student', 'prof' и 'admin', па во базата не може да се внесе непостоечка улога.
Note: See TracWiki for help on using the wiki.