2025 ж. 25 мау.·7 мин

Объектілер бойынша шектеулері бар RBAC қолжетімділігін жобалау

RBAC рөлдерімен бірге объектілер бойынша шектеулерді қалай жобалау керек: филиалдар, жобалар, конфиденциальды кейстерге арналған саясаттар мысалдары және тестілеу тәсілдері.

Объектілер бойынша шектеулері бар RBAC қолжетімділігін жобалау

Неліктен жай RBAC жиі жеткіліксіз\n\nRBAC рөл арқылы қолжетімділікті ыңғайлы етеді: оператор, менеджер, администратор. Бірақ тәжірибеде рөлдер тез арада тым кеңейеді. Бір менеджер бірнеше филиалдағы жобаларды басқара алады, ал кей деректер сол қызметкерлерге де жабық болуы тиіс.\n\n«Таза» RBAC мәселенің «роль не істей алады» деген жауабын берсе де, «нәтижесінде қай объектілерге» деген сұраққа нашар жауап береді. Нәтижесінде қолжетімділік «сақтану үшін» кеңейтіледі, кейін жылдар бойы ерекшеліктермен ұсталады.\n\nЖиі кездесетін жағдайлар, мұнда тек RBAC жеткіліксіз:\n\n- қызметкерге тек өз кезегі керек, бірақ роль бөлімшенің барлық өтініштерін ашады;\n- менеджер өз филиалымен байланысты жобаларға ғана қол жетімді болуы тиіс, ал роль барлық филиалдарға мүмкіндік береді;\n- кей құжаттар жеке деректерге немесе тендерлерге қатысты, оларды «басшы» рөліндегі барлық адамдарға көрсетуге болмайды;\n- бір жобаны бірнеше командалар жүргізеді, әр команда тек өз артефактілерін көруі тиіс.\n\nМұндай жағдайда көмектесетін нәрсе — объектілер бойынша шектеулер (object-level): пайдаланушы мен объектінің атрибуттарына қарай қолжетімдікті тарылтатын ережелер. Ең жиі қолданылатын түрлері: «тек өз жазбалары», «тек өз филиалы», «тек өз жоба», «тек N деңгейдегі рұқсаттағы кейстер». Роль жалпы әрекеттер жиынтығын (оқу, жасау, мақұлдау) береді, ал шектеулер шекараны анықтайды.\n\nБұл әсіресе қателік салдары ауыр болатын орындарда маңызды: құжаттар, азаматтар мен клиенттердің өтініштері, кадрлық деректер, медициналық жазбалар, қаржылық өтініштер. Көп филиалдары бар ұйымдарда сервис инженері өз аймағының өтініштерін ғана көруі тиіс, ал жоба жетекшісі — тек өз портфелінің келісімшарттарын.\n\nҚауіпсіздік талаптары мен жай ыңғайлылықты ажырату үшін қарапайым тест пайдалы: қызметкер «басқа» объектіні көрсе, бұл қауіп туғыза ма (заңды, келісімшарттық немесе ішкі саясатты бұзу) әлде жұмысты ғана қиындата ма. Бірінші жағдайда шектеулер қатты және тексерілетін болуы тиіс. Екінші жағдайда көбінесе интерфейстегі фильтрлар мен түсінікті кезектер жеткілікті, құқықтарды кеңейтудің қажеті жоқ.\n\n## Минималды сөздік: рөлдер, объектілер және атрибуттар\n\nҚолжетімділікті шатастырмау үшін терминдерге алдын ала келісіңіз. Әйтпесе талқылау тез арада «оған роль бар, демек бәрін көрсету керек» дегенге келеді, кейін «бәрі» ішінде басқа филиалдар мен жабық кейстер де бар екенін түсінеді.\n\nЖобалауда төрт субъектіні есте ұстау ыңғайлы: кім, не істейді, қандай объектілерге және қандай шарттарда.\n\n### Рөлдер, рұқсаттар, әрекеттер және объектілер\n\nРоль — адамға «не үшін қолжетімділік керек» деген жауап, нақты деректер жазбалары туралы емес. Рұқсаттар мен әрекеттер жүйенің нақты орындайтын нәрсесіне жақынырақ.\n\n- Роль: міндеттер жиынтығы (мысалы, қолдау операторы, жоба жетекшісі, есепші).\n- Рұқсат: әрекеттер класына құқық (мысалы, өтініштерді оқу, статус өзгерту, есеп шығару).\n- Әрекет: жүйедегі нақты операция (қарау, жасау, өңдеу, жою, экспорт).\n- Ресурс (объект): әрекет қолданылатын нәрсе (өтініш, келісімшарт, жоба, инцидент, файл).\n- Политика: рөл мен әрекетті объектіге және контекске қоюшы ереже.\n\n### Атрибуттар: ережелерде не салыстырамыз\n\nОбъектілердің атрибуттары арқылы объектілер деңгейіндегі шектеулер жұмыс істейді. Объектінің өрістері оның «кімнің» және «қаншалықты сезімтал» екенін көрсетеді: филиал, жоба, иесі, құпиялылық деңгейі.\n\nПайдаланушыда да атрибуттар бар: филиал, бөлім, лауазым, жоба тобына мүшелік. Қарапайым жағдайда салыстырулар user.branch == object.branch немесе user in object.project_team сияқты болады.\n\nКейде сұрау контексті қажет: уақыт, канал, желі. Бұл ақпарат ағу тәуекелі немесе комплаенс талаптары болғанда маңызды: мысалы, экспортты корпоративтік желіден тысқа тыйым салу немесе өте сезімтал кейстерге тек жұмыс уақытында және сенімді каналдан қол жеткізу.\n\nБарлығы үшін түсінікті формула: «кім + не істейді + қандай объектіге + қандай шарттарда». Мысалы: қолдау операторы өз филиалындағы өтініштерді оқиды; жоба жетекшісі тек өз жобасының тапсырмаларын өзгертеді; Confidential деңгейлі кейстерге қол жеткізу тек тағайындалған адамдарға және сенімді каналдан ғана рұқсат етіледі.\n\n## Рөлдер мен жауапкершілікті шатастырмай қалай сипаттау керек\n\nҚолжетімділік шатасуы көбінесе рөлдерді штаттық атаулармен атаудан басталады: «менеджер», «инженер», «бөлім бастығы». Нәтижесінде бірдей атау әр командада әртүрлі мән береді, ал құқықтар шашырайды. Рөлді лауазым бойынша емес, деректерге қатысты әрекеттер арқылы сипаттау оңай әрі қауіпсіз.\n\n### Қайдан бастау керек\n\nЖүйеде адамдар шын мәнінде орындайтын бизнес-операциялардың тізімін жинаңыз. Бұл IT, қауіпсіздік және процесс иелері үшін ортақ тіл болады. Көп жүйеде негізгі жиынтық қайталанады: қарау, жасау, өзгерту, финалдық статусқа өткізу, экспорт.\n\nСодан кейін операцияларды объектілерге байлаңыз: адам нақты нені қарайды немесе өзгертеді (өтініш, келісімшарт, инцидент, клиент картасы). Осылай объектілер бойынша шектеу керек жерлер тез көрінеді, жаңа рөлдер құрудың қажеті азаяды.\n\nРөлдердің үлкеюіне жол бермеу үшін оларды жауапкершілік бойынша бөліңіз, лауазым бойынша емес. Бір қызметкерде екі рөл болуы мүмкін, егер оның екі түрлі жауапкершілігі болса. Мысалы: түнгі кезекші ретінде «дежурный оператор», күндіз — «орындаушы». Рөлдер бірдей, бірақ уақыт бойынша әрекеті өзгереді.\n\n### Деректер иесі және арнайы рөлдер\n\nДеректер иелерін алдын ала келісіңіз: кім қолжетімдікті мақұлдайды және қай объектілерге. Бұл әкімшілер туралы емес, бизнес шешім туралы. Мысалы, қаржылық құжаттарға қолжетімдікті қаржы деректерінің иесі мақұлдайды, кадрлық деректерге — HR. Бұл жоқ болса, RBAC шексіз ерекшеліктерге айналады.\n\nТағы бір жиі жетіспеушілік — процестерге құндылық қоспайтын, бірақ бақылау және қолдау үшін маңызды рөлдер: платформа администраторы (бағдарлама параметрлері, мазмұнды оқымай), аудит (тексеру үшін оқу, өзгеріссіз), қауіпсіздік (процедура бойынша тергеу), қолдау қызметі (пайдаланушыларға көмек, минималды құқықтар).\n\nҚай жерде уақытша құқықтар қажет екенін алдын ала шешіңіз: демалысқа ауыстыру, 24/7 кезекшілік, бір реттік қолжетімділік тергеу үшін. «Мәңгілік» ерекшеліктер емес, мерзімі бар уақытша рөлдер мен механизмдері болғаны жақсы.\n\n## Филиалдарға арналған саясат үлгілері\n\nКомпанияда филиалдар болғанда RBAC тез арада «бір рөл әр филиалда әртүрлі деректерді көруі керек пе» деген сұраққа келіп тіреледі. Сондықтан рөлге көбіне объектілер бойынша шектеулер қосылады: «қандай жазбалар қолжетімді».\n\n### Объектілер үшін минималды атрибуттар\n\nӘр бизнес-объект (келісімшарт, өтініш, қызметкер, инцидент, шот) кемінде екі өріске ие болуы келісілген ыңғайлы: branch_id (филиал-меншікті) және confidentiality (қалыпты, ішкі, конфиденциалды). Ортақ деректер үшін cross_branch=true немесе project_scope=cross_branch деген флаг қосуға болады.\n\n### Ережелер мысалдары\n\nФилиалдық құрылымға арналған «RBAC + объектілер бойынша шектеулер» моделіндегі ережелер мысалдары:\n\n- Негізгі ереже: оқу және өзгерту тек пайдаланушының филиалымен сәйкес келетін объектілерде рұқсат етіледі (branch_id сәйкестігі). Бұл қалалар арасындағы «кездейсоқ» ағуды қорғайды.\n- Филиал басшысы: өзінің филиалының деректеріне кеңірек қолжетімділік бар (мысалы, барлық өтініштер мен есептерді көру), бірақ confidentiality=confidential белгісі бар объектілер тек тар тобына (мысалы, қауіпсіздік немесе HR) ғана қолжетімді.\n- Кросс-филиал командасы: роль «барлық филиалдарға» емес, тек айқын белгіленген межелі объектілерге (cross_branch=true) және нақты бастамаға (project_id) байланысты қолжетімділік береді.\n- Орталық офис: қолжетімділік географияға емес, функцияға байланысты берілген. Қаржы барлық филиалдардың шоттары мен төлемдерін көреді, бірақ кадрлық құжаттарды емес; HR қызметкерлер персонал карточкаларын көреді, коммерциялық келісімшарттарды емес. Мұнда шектеулер объект түрі мен атрибуттары бойынша жүреді, тек branch_id арқылы емес.\n- Уақытша ерекшеліктер: «жедел» қолжетімділік өтінішпен, аяқталу мерзімі, себеп және міндетті журналдау арқылы беріледі. Оны негізгі рөлді уақытша өзгертуден гөрі TTL бар бөлек рұқсат ретінде беру жақсырақ.\n\nКішкентай мысал: Алматы филиалының есепшісі тек branch_id=ALM бар шоттарды көреді. Егер ол ERP жаңарту бойынша кросс-филиал жобасына қосылса, онда ғана cross_branch=true және project_id=ERP2026 шарттары бар құжаттарды көреді, бірақ басқа филиалдардың шоттарын көрмейді.\n\n## Жобаларға арналған саясат үлгілері\n\nЖобаларда бір рөл (мысалы, инженер) бірнеше жобаға қатысуы мүмкін, бірақ әрқайсысында тек «өзінің» мәліметтерін көруі тиіс. Сондықтан объектілерге project_id қосып, кейде тағы status, owner_id, doc_type сияқты өрістер қою қажет.\n\nТөменде жоба папкалары, тапсырмалар, актілер, хат алмасу және жеткізілім артефактілері үшін саясат мысалдары бар.\n\n### Түсінікті ережелер жиынтығы\n\n- Жоба қатысушысы: тек өз project_id-і бар объектілерді оқиды және өңдейді. Бірнеше жобаға қатысса — тек сол жобаларға ғана қолжетімділік бар.\n\n- Жоба менеджері: жоба бойынша толық көріністі (тапсырмалар, мерзімдер, бюджеттік құжаттар, есептер) көреді, бірақ әдетте жеке қоса берілген файлдарды көрмейді. Мысалы, personal=true немесе doc_type=personal_note белгісі бар қоса берілген файлдар жеке рұқсатты талап етеді — «персоналды қоса берілгендерді көру».\n\n- Статус бойынша матрица: объектінің status (қараша, келісімде, мақұлданған, жабық) бар. Практикалық нұсқа: қатысушылар «қараша» және «келісімде» жағдайларын өңдей алады, бірақ «мақұлданған» тек оқуға ашық; «жабық» барлық қатысушыларға оқуға ашық, бірақ сақтау әкімшісінен басқа ешкім жоюға құқылы емес.\n\n- Шетелдік мердігер: жобаға «барлық» емес, бөлек объектілер жиынтығына ғана қол жеткізеді. Мысалы, тек тапсырмалар мен «ТЗ және нәтижелер» папкасы, қаржы, ішкі хат алмасу және жеке ескертпелерге жоқ. Қосымша — уақыт бойынша шектеу: қолжетімділік contract_end мерзіміне дейін ғана әрекет етеді.\n\n- Объектіні жобалар арасында ауыстыруға тыйым: объектінің project_id-ін өзгертуге тек бөлек рұқсат (reassign_project_object) бар пайдаланушылар ғана құқылы. Бұл құжаттың басқа, кеңірек қолжетімді жобасына «көшіп кетуін» болдырмайды.\n\n### Қысқа сценарий мысалы\n\n«Сервер модернизациясы» және «Бухгалтерия үшін ПО» деген екі параллель жоба бар дейік. Инженер бірінші жобаға қатысады, аналитик — екіншіге. Екеуі де «жоба қызметкері» рөліне ие болса да, project_id фильтрі аналитикке желілік схемаларды көрсетпейді, ал инженерге — қаржылық қоса берілген файлдарды көрсетпейді. Жоба менеджері өз жобасының жалпы көрінісін көреді, бірақ егер тапсырмада жеке қоса берілген файл (мысалы, өту үшін паспорт сканы) болса, ол бөлек рұқсат болмағанша жабық қалады.\n\nОсындай ережелерді «кім + қандай әрекет + қандай объектілер + қандай атрибуттар» түрінде жазған ыңғайлы. Тартасу рөл атауларында емес, тексерілетін шарттар туралы болады.\n\n## Құпия кейстер үшін саясат мысалдары\n\nКейстерде (инциденттер, өтініштер, тергеулер) бір рөл жеткіліксіз болуы мүмкін. Бір филиал ішінде адамдар бір рөлде болса да, кейс тек тағайындалған адам мен иесіне ғана көрінуі тиіс. Сондықтан RBAC-қа кейс атрибуттары, тағайындалған топ және классификация бойынша шектеулер қосылады.\n\n### Классификация және негізгі көріну ережелері\n\nТөрт деңгей енгізу ыңғайлы: обычный, ограниченный, конфиденциальный, особо конфиденциальный. Классификация case.classification сияқты өріске сақталып, ережелерде қолданылады.\n\nМысал ережелер жиынтығы (оқылуы: «роль + объект шарттары + әрекет»):\n\n- Обычный: филиалдың қолдау қызметінің қызметкерлері өз филиалының кейстерін көреді, шарты — case.branch == user.branch.\n- Ограниченный: тек тағайындалған топ пен иесі қарай алады: user in case.assigned_group OR user == case.owner.\n- Конфиденциальный: ереже сол, бірақ филиал бойынша рөлге сүйеніп қарауға тыйым қосылады — тек тапсырма тобына нақты қосылғандар ғана көре алады.\n- Особо конфиденциальный: кіру тек тар топқа (мысалы, қауіпсіздік қызметі) және иесіне рұқсат етіледі, әрі делегацияны бөлек мақұлдау қажет.\n\n### Қауіпті әрекеттер және деректерді жасыру\n\nҚауіпі жоғары әрекеттер (жабу, экспорт, жою) үшін жиі «екі адамның ережесі» қолданылады: біреу әрекетті бастайды, екіншісі растайды. Бұл қателік пен зұлым пайдалануды азайтады.\n\nСонымен қатар ішінара қарау қажет болуы мүмкін: кейс көрінеді, бірақ сезімтал өрістер жасырылады. Мысалы, «конфиденциальный» кейсте пайдаланушы статус пен тарихты көре алады, бірақ қоса берілген файлдар мен PII (толық аты, ИИН, байланыс) арнайы рұқсат болмағанша көрсетілмейді.\n\nБасып шығару мен экспортқа рұқсаттарды бөлек анықтаңыз. Қарау рұқсаты бар болса да, экспорт пен басып шығару әдетте өшірулі болуы тиіс.\n\nҚұлап кетулерді байқамау үшін тексеріңіз:\n\n- филиал басшысы топқа қосылмаған болса «конфиденциальный» кейсті көре алмайды;\n- тағайындалған орындаушы кейсті көре алады, бірақ PII мен қоса берілген файлдар жоқ, егер қосымша құқықтар берілмесе;\n- экспорт пен басып шығару бөлек рұқсаттарсыз жұмыс істемейді;\n- жабу/жою екінші пайдаланушының растауын талап етеді және журналда түсінікті із қалады.\n\n## Қадам-қадам бойынша: RBAC + объектілер бойынша шектеулерді қалай жобалау керек\n\nЕгер қолжетімділіктер тізімі мен объектілер бойынша ережелерсіз RBAC жобаласаңыз, рөлдер тез «суперқұқықтарға» айналады. Төмендегі схема модельді қарапайым және тексерілетін сақтауға көмектеседі.\n\n### Жобалау қадамдары\n\n1) Қорғайтын нәрсені сипаттаңыз: объектілер мен олардың атрибуттары. Мысалы, «Қолдау өтініші» үшін филиал, жоба, иесі, статус және құпиялылық белгісі бар. «Жоба» объектісінде код, тапсырыс беруші, жетекші және қатысушылар жиынтығы болуы мүмкін.\n\n2) Рөлдерді бөлім атаулары арқылы емес, әрекеттер арқылы анықтаңыз. Жақсы рөл етістіктер жиынтығы ретінде айтылады: «оқу», «құру», «өңдеу», «мақұлдау», «жабу». Осылай артық әрекетті анықтау оңай.\n\n3) Негізгі қағида ретінде әдепкіде тыйым және минималды қажетті құқықты ұстаңыз. Қолжетімділік тек нақты ереже арқылы беріледі, «барлық қызметкерлерге әдепкі» емес.\n\n4) Рөлдің тек қажетті аймақта жұмыс істеуін қамтамасыз ету үшін объектілер бойынша шектеулер қосыңыз: мысалы «тек өз филиалы», «тек өз жобасы», «тек мен тағайындалған кейстер». Бұл әр филиалға жеке рөлдер жасау қажеттігін азайтады.\n\n5) Ережелерді шешімдер кестесінде ресмилендіріңіз: жол = әрекет, баған = роль, бөлек бағандар = объектілер бойынша шарттар. Кестені деректер иелерімен (кім жобалық деректерге жауапты, кім өтініштерге, кім қаржыға) келісу маңызды. Филиалдары бар компанияда бұл әдетте әртүрлі адамдар.\n\n### Ерекшеліктер және мерзім\n\nМодельдің шашырамауы үшін ерекшеліктерді рәсімдеу процесін алдын ала анықтаңыз:\n\n- кім уақытша қолжетімдікті сұрай алады және қанша уақытқа;\n- кім мақұлдайды (деректер иесі, басшы, қауіпсіздік);\n- қандай негіз (инцидент, ауысым, аудит);\n- қалай тіркеледі және қашан қайта қаралады;\n- мерзім аяқталғаннан кейін не болады (автоматты қайтару).\n\nОсылайша рөл «не істеуге болады» жауап берсе, объектілер бойынша шектеулер «немен жасауға болады» жауап береді.\n\n## Қолдану саясаттарын қалай тестілеу: сценарийлер мен күтілетін нәтижелер\n\nҚолжетімділікті тестілеуді кодтан емес, сценарийлер кестесінен бастау ыңғайлы. Бұл негізінде матрица: роль × әрекет × объект типі × объект атрибуттары. Атрибуттар қарапайым болуы мүмкін (филиал, жоба, құпиялылық деңгейі, статус: белсенді немесе архив).\n\nМатрица тым үлкен болмауы үшін 5-10 ең жиі әрекетті және 3-5 ең маңызды объект түрін таңдаңыз. Филиалдар мен жобалары бар компания үшін әдетте «қарау», «құру», «өзгерту», «экспорт», «орындаушыны тағайындау». Объектілер: «жоба», «тапсырма», «құжат», «өтініш кейсі».\n\nӘр сценарий үшін күтілетін нәтижені тіркеңіз: рұқсат етілген немесе тыйым салынған және неге. Позитивті және негативті тесттер болуы тиіс. Мысалдар:\n\n- Алматы филиалының операторі өз филиалының «обычный» статусындағы кейсті қарайды — рұқсат;\n- сол оператор Астана филиалының кейсін ашуға тырысады — тыйым (филиал бойынша фильтр);\n- «ERP-2026» жобасының жетекшісі жобаның құжаттарын өңдейді — рұқсат, бірақ тек өз жобасында;\n- жоба қатысушысы барлық кейстер тізімін (фильтрсіз) экспорттауға тырысады — тыйым;\n- «поддержка» рөліндегі қызметкер «секрет» деңгейіндегі конфиденциальный кейсті қосымша допусксыз ашады — тыйым.\n\nШекаралық жағдайларды бөлек тексеріңіз — олар модельді жиі бұзады: қызметкерді филиал арасында ауыстыру, роль өзгерісі, артқа қарай жобаға қосу, жобаның архивтелуі. Мысалы: қызметкер Қарағандықтан Алматыға ауысса — осыдан кейін ол Қарағанданың ескі объектілерін көруіне болмайды, тек ол нақты тағайындалған жерде ғана көре алады (егер ереже сондай болса).\n\nТесттік деректерді осылай дайындаңыз, олар ақауларды тудырады: минимум 2-3 филиал, қатысушылары қиылысып кететін 2 жоба, әртүрлі құпиялылық деңгейлері бар бірнеше объект, бір архивтік жоба. Іздеу арқылы ағуларды табу үшін ұқсас аттары бар объектілер қосу пайдалы.\n\nЕрежелер өзгерген сайын регресс-тесттер қажет:\n\n- әр маңызды әрекет үшін бір «рұқсат» және бір «тыйым» тесті;\n- филиал ауысқан және роль өзгерген кезде қолжетімдікті тексеру;\n- архивтік жобалар: оқу бар, өзгерту жоқ (мақсатқа сай болса);\n- жаппай операциялар (экспорт, есептер, іздеу) — міндетті фильтрлармен;\n- айналып өту жолдары: ID бойынша тікелей қолжетімділік, байланысты объектілер, тарих арқылы.\n\nЖурналдарды ұмытпаңыз. Рұқсат болғанда кім, қашан, неге және қандай объектке кіргені көрінуі тиіс. Бас тартқан кезде кім әрекет істеді, қай объектке және қай тексеру сәтсіз болғаны (роль, филиал, жоба, құпиялылық) жазылуы керек. Бұл инциденттерді талдауға және саясаттың жоспарланғандай жұмыс істейтінін дәлелдеуге көмектеседі.\n\n## Қол жетімділік модельдеріндегі жиі қателіктер мен тұзақтар\n\nЕң жиі проблема — модельді бір рет жасап, кейін ерекшеліктермен өмір сүру. Ал жарты жылдан кейін ешкім неге осы қызметкерде осындай құқық бар екенін білмейді. Сондықтан алдымен қызмет ету механизмі: кім рөл иесі, құқықтарды қалай қайта қарау, ерекшеліктер қалай тіркеледі.\n\n### Қатты үлкен рөлдер және «беріп, ұмытып кету»\n\n«Ыңғайлылық үшін бәрін беру» принципі бойынша құрастырылған рөл тез үлкейеді. Нәтижесінде роль 5% қолданушыларға ғана сәйкес келеді, қалғандары артық құқық алады. Жақсы модельде рөлдер жұмысты сипаттайды (тапсырмалар), адамдарды емес, және әр рөлде өзгерістер үшін жауапты иесі болуы керек.\n\n«Біраз көбірек беру» қажет болса, бұл бөлек уақытша рұқсат болуы керек — мерзімі мен себебі көрсетілген. Уақытсыз ерекшеліктер мәңгілік саңылауға айналады.\n\n### Объектілік құқықтар мен әрекеттер құқықтарын араластыру\n\nКөбінде «қарау» және «қауіпті» әрекеттер бірге қосылып кетеді: карточканы көрсе, экспорт та, басып шығару да, жүктеу де автоматты түрде қолжетімді болады. Бірақ экспорт — бұл деректерді жүйеден тысқа шығарумен байланысты. Тіпті объектілер бойынша шектеулер дұрыс болса да, экспорт саясатты бұзуы мүмкін.\n\nПрактикалық тәсіл: әрекеттер бойынша құқықтарды (view, edit, export, print, delete) бөлек ұстаңыз және оларды жеке тексеріңіз, тіпті объект бірдей болса да.\n\n### Атрибуттар орнына қолмен тізімдер пайдалану\n\nҚолжетімділікті «кімге берілген» тізімдер арқылы құрсаңыз, оларды жаңартамайды. Қызметкер басқа филиалға ауысқанда немесе жобаға өзгеріс енгенде ол ескі тізімде қалады. Сенімдірек әдіс — пайдаланушының филиалы, жобаға мүшелігі, допуск деңгейі, жұмыс статусы сияқты атрибуттарға сүйену. Тек өте тар топтар үшін ғана қолмен тізім қалдырыңыз (мысалы, өте сирек мақұлдау тобы).\n\n### Интеграциялар мен сервис аккаунттарды ұмытпау\n\nИнтерфейс жабық болса да, деректер есептер, API, экспорттар және сақтық көшірмелер арқылы ағуы мүмкін. Бұл BI, құжат айналымы немесе басып шығаруда жиі шығады.\n\nТексеру тізімі: есептер мен есеп құрастырушыларда не жинауға және экспорттауға болатынын, басып шығару және жаппай экспортты кім қоса алатынын, API кілттері мен сервис аккаунттардың қандай рөлдері бар екенін, фондық тапсырмалар мен интеграциялық кезектер не оқитынын және жазады оны тексеріңіз. Админдердің журналдар мен қоса берілген файлдарға «сквозной просмотр» жоқ па соны тексеріңіз.\n\n### Құқықтарды қайтарып алудың нақты процесі жоқ\n\nЖұмыс уақытынан кету, лауазым өзгеру, филиалға немесе жобаға ауысу құқықтардың автоматты түрде қайтарылуын шақыруы тиіс. Егер бұл процесс қолмен болса, ол қателіктерге әкеледі.\n\nҚарапайым ереже енгізіңіз: қосымша құқықтар өтінішпен беріледі, иесі, мерзімі, себебі көрсетіледі және қызметкер статусы өзгерген сайын автоматты тексеру болады.\n\n## Қысқа чек-лист және келесі қадамдар\n\nМодельді іске қоспас бұрын ролдер ғана емес, объектілер бойынша шектеулердің болуы және бәрінің жоспарланғандай жұмыс істейтінін дәлелдеу тәсілі бар-жоғын тез тексеріңіз.\n\nӘдетте тосынсыйдан сақтайтын чек-лист:\n\n- рөлдер: 3-5 негізгі рөл, қарапайым атаулар және жауапкершілік шекаралары (кім не істейді, «кім маңызды» емес);\n- объектілер және атрибуттар: негізгі объектілер тізімі (құжат, өтініш, кейс, жоба) және 2-3 нақты атрибут, шектеуді іске асыратын (филиал, жоба, құпиялылық деңгейі);\n- ерекшеліктер: сирек жағдайлар (демалысқа ауысу, уақытша өтініш бойынша қолжетімділік, тергеулер) және мұндай құқықтардың мерзімі;\n- журналдар және аудит: қолжетімділік және бас тарту кезінде не жазылады, кім қарайды және оқиғаға қатысты картинаны қаншалықты тез қалпына келтіруге болады;\n- тест сценарийлері: күтілетін нәтиже (рұқсат/тыйым) бар тексерістер, соның ішінде негативті сценарийлер және шектеулерді айналып өту әрекеттері.\n\nМинималды артефакт жиынтығын компакт түрде сақтауға болады: ережелер кестесі (роль + әрекет + объект + объект шарттары), атрибуттар сөздігі (қайдан алынатыны, қалай толтырылатыны, қандай мәндер мүмкін) және деректер иелерінің тізімі (кім атрибуттардың сапасына жауап береді және ерекшеліктер туралы шешім қабылдайды).\n\nБастау үшін бір процесті таңдаңыз және бәрін бірден жасауға тырыспаңыз. Мысалы, сервис-деск үшін тек өтініштерді оқу және өңдеу алынып, объектілер бойынша шектеулер филиал мен жобаға негізделсін, ал құпия кейстер бөлек қаттырақ ережелермен шығарылсын.\n\nІске асыру жоспары:\n\n- пилот: бір филиал немесе бір процесс (мысалы, өтініштерді өңдеу) нақты пайдаланушылармен;\n- атрибуттарды баптау: «филиал», «жоба» және «құпиялылық деңгейі» өрістерін кім және қашан жаңартайтынын және бос мәндермен не істеу керектігін анықтау;\n- тестілеу: әр роль түрі үшін сценарийлер, плюс 2-3 «жаман» сценарий (басқа филиал, басқа жоба, жоғары конфиденциальность);\n- кері байланыс: ережелер жұмысты қиындататын жерлерді тіркеу және рөлдерді емес, объектілер бойынша шарттарды түзету;\n- масштабтау: модельді басқа филиалдарға және процесстерге көшіру, атрибуттар мен тесттерге көрсетілген тәсілді сақтау.\n\nҚолдауды нақты тағайындаған дұрыс: модель иесі (ереже мен ерекшеліктер), деректер иесі (атрибуттар және олардың сапасы) және тесттерге жауапты адам (процестер өзгерген кезде сценарийлерді жаңарта алады).\n\nИнфрақұрылым деңгейінде практикалық іске асыру (жұмыс орындары, сервер бөлігі, интеграциялар, аудит, 24/7 қызмет көрсету) әдетте жүйелік интегратормен бірге жүргізген ыңғайлы. Қазақстанда мұндай мәселелерді GSE.kz компаниясымен талқылауға болады — компания жүйелік интеграция және корпоративтік IT жүйелерді қолдау бойынша жұмыс істейді және Қазақстанда компьютерлер мен серверлер өндіреді, бұл жергілікті мазмұн мен жеткізу тізбегінің айқындылығына маңызды болуы мүмкін.

FAQ

Почему обычного RBAC часто не хватает?

RBAC «рөл не істей алады» сұрағына жауап береді, бірақ «қандай нақты объектілерге» жауап бермейді. Бір рөл бірнеше филиалда, жобада немесе әртүрлі сезімтал деректермен жұмыс істегенде object-level шектеулерсіз қолжетімділік тез арада тым кеңейеді.

Как правильно сочетать роли и ограничения по объектам?

Алдымен рөл арқылы әрекеттерді анықтаңыз: мысалы, *оқу*, *өңдеу*, *жабу*, *экспорт*. Сосын объектілерге ережелер қосыңыз: «тек өз бөлімшесі», «тек өз жобалары», «тек тағайындалған кейстер», «тек N деңгейдегі допуск». Осылайша рөл жалпы әрекеттер жиынтығын береді, ал шарттар қолжетімділіктің шегін тарылтады.

Какие атрибуты нужно заложить в объекты, чтобы object-level правила работали?

Минимум — меншіктілік атрибуты және сезімталдық атрибуты. Филиалдық құрылым үшін объектке `branch_id`, пайдаланушыға `branch`, плюс `confidentiality` (обычный/внутренний/конфиденциальный) жеткілікті. Жобалар үшін қосыңыз: `project_id`, қажет болса `status`, `owner_id`, `doc_type`.

Как выглядит практичная политика доступа для филиалов?

Негізгі ереже — тек өз филиалының объектілеріне қолжетімділік: `user.branch == object.branch`. Халықаралық/кросс-филиалдық тапсырмалар үшін объектке айқын белгі қойыңыз, мысалы `cross_branch=true`, және қолжетімділікті нақты жоба немесе бастамаға шектеңіз. Бұл «барлық филиалдарды көру» рөлін беруден қауіпсіз.

Как ограничить доступ в проектах, чтобы участники видели только «свое»?

Қатысушы жобаға тек өз `project_id`-і бар объектілерді оқиды және өңдейді. Пайдаланушы бірнеше жобаға қосылған болса, қолжетімділік тек сол `project_id`-терге ғана кеңейеді, бөлімнің барлық жобаларына емес. Подрядчиктер үшін қосымша уақыттық шектеу мен объект түрлеріне шектеу қойыңыз.

Что делать, если кейс должен быть виден, но без персональных данных и вложений?

Көріністі және сезімтал өрістерді бөлек рұқсаттармен реттеңіз. Пайдаланушы карточканың статусы мен тарихын көре алады, бірақ қоса берілген файлдар мен PII көрсетілмейді, егер арнайы рұқсат берілмесе. Бұл кейсті өңдеу қажет болғанда жеке деректердің ағуын азайтады.

Как настроить доступ к конфиденциальным кейсам внутри одного филиала?

Деңгейлерді енгізіңіз, мысалы: обычный, ограниченный, конфиденциальный, особо конфиденциальный, және оны `case.classification` сияқты өріске сақтаңыз. Содан кейін ережелерді қарапайым етіп жасаңыз: «обычный» — филиал бойынша; «ограниченный» — тек тағайындалған топ пен иесі; «конфиденциальный» — тіпті филиал жетекшісі де автоматты түрде көре алмайды; «особо конфиденциальный» — тек тар топ пен иесі.

Почему экспорт, печать и удаление нужно отделять от обычного просмотра?

Экспорт пен басып шығару бөлек рұқсаттар болуы тиіс және оларды әдетте өшірулі ұстаған дұрыс, тіпті егер қарау рұқсаты болса да. Жабу және жою сияқты маңызды әрекеттерге қосымша бақылау — мысалы, екі адамның растауы және міндетті журналдау — қосыңыз. Бұл «көру — значит выгрузил» қаупін азайтады.

Как оформлять временные исключения и «пожарный» доступ, чтобы не остались вечные дыры?

Уақытша қолжетімділікке өтінім беру процесін енгізіңіз: кім сұратады, кім мақұлдайды, мерзімі, себебі және міндетті логтау. Техникалық жағынан негізгі рөлді уақытша ауыстырудан гөрі TTL бар бөлек рұқсат беру ыңғайлы. Мерзім аяқталғаннан кейін қолжетімділік автоматты түрде қайтарылады.

Как тестировать политики доступа, чтобы поймать утечки и обходы?

Сценарийлер кестесін жинаңыз: роль × әрекет × объект типі × атрибуттар (филиал, жоба, классификация, статус). Әр сценарий үшін болжалды нәтиже — «разрешено/запрещено» және себебін көрсетіңіз, соның ішінде негативті тесттер. Одан бөлек айналып өту жолдарын тексеріңіз: іздеу, жаппай экспорт, ID бойынша тікелей қолжетімділік, байланысты объектілер және интеграциялық аккаунттар.