
Език 🇧🇬 Български
Предистория
Имплементация
Какво е контрол на достъпа? 
С FastComments SSO Access Control, понякога наричано RBAC, потребителите могат да бъдат ограничени да имат достъп само до определени страници или нишки от коментари. Освен това потребителите могат да се @mention само помежду си в една и съща група.
Подробно
Можем да поставим Users и, по избор, Pages в групи.
Когато Users са поставени в групи и опцията Limit Comments by SSO User Groups е включена в Widget Settings, потребителите ще виждат само коментари от потребители в техните същите групи и ще могат да @mention само потребители от същите групи.
Допълнително, Pages могат да бъдат поставени в групи, и тогава потребителите могат да имат достъп само до коментари за страници, до които имат достъп.
Наричаме това „групи на ниво потребител“ срещу „групи на ниво страница“.
Кое от двете е подходящо за вас?
Използвайте групи на ниво потребител, ако...
- Искате да използвате същата стойност на
urlId(URL на страницата или идентификатор на статия), но да ограничите коментарите по групи. - Например, може да искате да имате групи „Нов потребител“ и „Опитен потребител“, които никога да не виждат коментарите един на друг на едни и същи страници.
Използвайте групи на ниво страница, ако...
- Вашите групи са свързани с конкретни страници.
- Например, потребители в групата „Публични страници“ не би трябвало да виждат статии, маркирани като „Строго секретно“.
Как работи 
FastComments Access Control работи чрез присвояване на Pages и Users към желаните групи.
A group is simply a string identifier, like GREEN or abc-123.
Users and Pages are not just limited to one group. They are limited to 100 and 1000 groups, respectively.
Достъп до неоторизирани страници
If a user tries to access a page they don't have access to, they will see an error message, like below:
Текстът на съобщението може да бъде персонализиран.
Спецификацията 
Дефинирането как множество потребители взаимодействат и тестването на това е усложнено. Ето следната спецификация, която следваме за контрол на достъпа, и която можете да използвате, за да тествате вашата имплементация:
Страница с null group ids, потребител с null group ids - трябва да има достъп.
Страница с null group ids, потребител с group ids - трябва да има достъп.
Страница с group ids, потребител с null group ids - трябва да има достъп.
Страница с group ids, потребител с empty list - трябва да НЯМА достъп.
Страница с group ids, потребител с group ids - има пресечение - трябва да има достъп.
Страница с group ids, потребител с group ids - няма пресечение - трябва да НЯМА достъп.
Страница с empty list of group ids (никой няма достъп), потребител с null - трябва да НЯМА достъп.
SSO User A = Няма дефинирани group ids (null = пълен достъп).
SSO User B = Няма дефинирани group ids (null = пълен достъп).
A може да @B.
SSO User A = Няма дефинирани group ids (null = пълен достъп).
SSO User B = Има дефинирани group ids.
A може да @B.
SSO User A = Има дефинирани group ids.
SSO User B = Няма дефинирани group ids (null = пълен достъп).
A може да @B.
SSO User A = Group ids = [a].
SSO User B = Group ids = [b].
A НЕ може да @B.
SSO User A = Group ids = [a].
SSO User B = Group ids = [a, b].
A може да @B.Имплементация 
Споменаване на потребители в други групи
Ако двама потребители принадлежат към два различни набора от групи и няма пресичане, те няма да могат да @mention-ват един друг.
Ако потребител ръчно въведе @mention и бъде публикуван коментарът му, той ще остане като обикновен текст. Другият потребител няма да бъде отбелязан.
Поддържане на групите
Groups се дефинират чрез ресурсите на API Pages и SSOUsers, съответно.
Pages API може да бъде извикан, за да се дефинира наборът от групи, които имат достъп до страницата. По подразбиране всички групи и потребителите, които не принадлежат към група, имат достъп.
По подобен начин SSOUsers API може да бъде извикан, за да се дефинират групите, свързани с всеки потребител.
За двата ресурса няма ограничения относно кога групите могат да бъдат зададени или актуализирани.
Ако целта е само да се ограничат възможностите потребителите да се @mention-ват един друг, тогава не е необходимо да се вземат предвид Pages.
Забележка!
Дефинирането и актуализирането на SSO потребителските групи не изисква използване на API и може вместо това да се актуализира автоматично чрез дефиниране на group ids в SSO payload, предаван към comment widget. Въпреки това, за големи списъци с групи това не се препоръчва, тъй като потребителят би трябвало да изпраща този payload при всяко зареждане на страницата.
Примери за API заявки 
Тук ще преминем през извикване на FastComments API за настройване на контрол на достъпа.
Преди да започнем, отбележете, че не е необходимо да създаваме изрично структура Group. Групите са просто идентификатори
добавяни към Users и Pages. Добавянето на група към потребител или страница автоматично "създава" групата.
Първо, нека създадем двама потребители, User A и User B; ще ги поставим в Group X:


Сега нека създадем Page. Ще я наречем нашата Confidential Page, и към момента нито един от тези потребители няма да има достъп до нея, тъй като тя ще е в групата CONFIDENTIAL:

Потребителите A и B в момента НЯМАТ достъп до новата страница. Въпреки това, тъй като са в една и съща група, GROUP-X, те могат да се @mention взаимно.
Нека актуализираме User B, така че да може да получи достъп до страницата:

User B вече принадлежи и към двете групи. Нашите потребители все още могат да се @mention взаимно, но само User B може да вижда нашата Confidential Page.
Нека направим така, че User B да може единствено да вижда Confidential Page:

Сега те могат да виждат конфиденциалната страница, но нито един от нашите потребители не може да се @mention взаимно, тъй като са в различни групи.
Въпреки това, всеки потребител, който не е част от контрола на достъпа, ще може да получи достъп до нашата страница. За да предотвратите това, уверете се, че нито един SSO Users няма groupIds зададени на null. Например, нека създадем User C, който има достъп до всичко:

Като зададем groupIds на null, казваме, че те не са ограничени от контрола на достъпа.
Сега нека създадем страница, до която всички имат достъп:

Като зададем accessibleByGroupIds на null, казваме, че тази Page не се контролира чрез контрол на достъпа, и и двамата потребители могат да имат достъп до нея.
Това завършва нашия преглед на API за Контрол на достъпа.