Changes between Version 1 and Version 2 of UseCase001


Ignore:
Timestamp:
09/15/26 11:37:15 (2 weeks ago)
Author:
233149
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • UseCase001

    v1 v2  
    1 == UseCase001 - Најава на корисник
     1== UC001 - Најава во системот
    22
    3 === Актери
    4  * Ненајавен корисник
     3'''Иницијален актер:''' Посетител
    54
    6 === Чекори
    7  1. Корисникот кликнува на копчето „Најави се“ (Log In)
    8  2. На корисникот му се прикажува форма со две полиња - е-пошта и лозинка
    9  3. Корисникот ја пополнува формата со податоците внесени при регистрација
    10  4. Корисникот кликнува на копчето „Најави се“
    11  5. Системот ја пребарува базата за корисник со внесената е-пошта
    12  6. Внесената лозинка се споредува со хешираната лозинка во базата (BCrypt)
    13  7. Доколку податоците се точни, системот генерира JWT и refresh токен
    14  8. По успешна најава корисникот се пренасочува кон почетната страна според неговата улога
     5'''Други актери:''' -
     6
     7Посетителот сака да се автентицира со е-пошта и лозинка и да добие пристап до
     8функционалностите наменети за неговата улога. Целта е издаден пристапен токен со
     9кој сите останати случаи на употреба знаат кој е корисникот и што смее да прави.
     10
     11=== Сценарио
     12
     13 1. Посетителот ја отвора почетната страница и ги внесува е-поштата и лозинката.
     14
     15 2. Системот го бара корисникот по е-пошта. Колоната email има ограничување UNIQUE, па барањето враќа најмногу еден ред.
     16{{{#!sql
     17SELECT id, email, password, role
     18FROM project.users
     19WHERE email = 'stefan.saveski@students.finki.ukim.mk';
     20}}}
     21
     22 3. Ако не е пронајден корисник, системот прикажува иста порака како и при погрешна лозинка, за да не се открие кои е-пошти постојат во системот.
     23
     24 4. Системот ја споредува внесената лозинка со зачуваниот BCrypt hash. Споредбата се врши во апликацијата, бидејќи во базата се чува само hash-от.
     25
     26 5. Ако лозинката е точна, системот издава пристапен токен (JWT) кој ги содржи идентификаторот, е-поштата и улогата на корисникот.
     27
     28 6. Ако корисникот побарал да остане најавен, системот запишува и токен за освежување.
     29{{{#!sql
     30INSERT INTO project.token (user_id, token, expires_at, is_valid)
     31VALUES (1, 'BCfXBUR-Q2E7Vkglwh5OmdbhHH0MS-askSO8M0W6sRk', now() + interval '1 month', TRUE);
     32}}}
     33
     34 7. Системот го пренасочува корисникот според улогата: студентите кон студентскиот дел, професорите кон професорскиот.
     35
     36 8. При подоцнежно освежување на сесијата, системот го проверува токенот за освежување.
     37{{{#!sql
     38SELECT t.id, t.user_id, u.email, u.role
     39FROM project.token t
     40JOIN project.users u ON u.id = t.user_id
     41WHERE t.token = 'BCfXBUR-Q2E7Vkglwh5OmdbhHH0MS-askSO8M0W6sRk'
     42  AND t.is_valid = TRUE
     43  AND t.expires_at > now();
     44}}}
     45
     46 9. При одјава, системот го поништува токенот без да го брише, за да остане трага.
     47{{{#!sql
     48UPDATE project.token
     49SET is_valid = FALSE
     50WHERE user_id = 1 AND is_valid = TRUE;
     51}}}
     52
     53=== Алтернативни текови
     54
     55 * '''3а.''' Непостоечка е-пошта или погрешна лозинка - системот прикажува општа порака за неуспешна најава.
     56 * '''8а.''' Токенот е истечен или поништен - барањето не враќа ниту еден ред и корисникот мора повторно да се најави.
     57
     58=== Забелешки
     59
     60 * Улогата се чува како набројувачки тип user_role со вредности 'student', 'prof' и 'admin', па во базата не може да се внесе непостоечка улога.