Skip to content

Commit f1fc22c

Browse files
committed
Add result filter ALL_FAILED
1 parent 35a8906 commit f1fc22c

File tree

3 files changed

+22
-1
lines changed

3 files changed

+22
-1
lines changed

ydb/core/security/ticket_parser_impl.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -409,6 +409,7 @@ class TTicketParserImpl : public TActorBootstrapped<TDerived> {
409409
action->set_permission(permissionName);
410410
requestForPermissions << " " << permissionName;
411411
}
412+
request->Request.set_result_filter(yandex::cloud::priv::accessservice::v2::BulkAuthorizeRequest::ALL_FAILED);
412413
BLOG_TRACE("Ticket " << record.GetMaskedTicket() << " asking for AccessServiceBulkAuthorization(" << requestForPermissions << ")");
413414
record.ResponsesLeft++;
414415
Send(AccessServiceValidatorV2, request.Release());

ydb/core/security/ticket_parser_ut.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1441,6 +1441,18 @@ Y_UNIT_TEST_SUITE(TTicketParserTest) {
14411441
UNIT_ASSERT(result->Token->IsExist("something.read-bbbb4554@as"));
14421442
UNIT_ASSERT(!result->Token->IsExist("something.write-bbbb4554@as"));
14431443

1444+
accessServiceMock.AllowedUserPermissions.insert("user1-something.connect");
1445+
runtime->Send(new IEventHandle(MakeTicketParserID(), sender, new TEvTicketParser::TEvAuthorizeTicket(
1446+
userToken,
1447+
{{"folder_id", "aaaa1234"}, {"database_id", "bbbb4554"}},
1448+
{"something.read", "something.connect", "something.list", "something.update"})), 0);
1449+
result = runtime->GrabEdgeEvent<TEvTicketParser::TEvAuthorizeTicketResult>(handle);
1450+
UNIT_ASSERT(result->Error.empty());
1451+
UNIT_ASSERT(result->Token->IsExist("something.read-bbbb4554@as"));
1452+
UNIT_ASSERT(result->Token->IsExist("something.connect-bbbb4554@as"));
1453+
UNIT_ASSERT(!result->Token->IsExist("something.list-bbbb4554@as"));
1454+
UNIT_ASSERT(!result->Token->IsExist("something.update-bbbb4554@as"));
1455+
14441456
// Authorization ApiKey successful.
14451457
runtime->Send(new IEventHandle(MakeTicketParserID(), sender, new TEvTicketParser::TEvAuthorizeTicket(
14461458
"ApiKey ApiKey-value-valid",

ydb/library/testlib/service_mocks/access_service_mock.h

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,7 @@ class TTicketParserAccessServiceMockV2 : public yandex::cloud::priv::accessservi
229229
TString token = request->has_iam_token() ? request->iam_token() : request->api_key();
230230
if (request->has_actions()) {
231231
const auto& actions = request->actions();
232+
bool wasFoundFirstAccessDenied = false;
232233
for (const auto& action : actions.items()) {
233234
if (UnavailableUserPermissions.count(token + '-' + action.permission()) > 0) {
234235
return grpc::Status(grpc::StatusCode::UNAVAILABLE, "Service Unavailable");
@@ -251,7 +252,14 @@ class TTicketParserAccessServiceMockV2 : public yandex::cloud::priv::accessservi
251252
response->mutable_subject()->mutable_service_account()->set_id(token);
252253
response->mutable_subject()->mutable_service_account()->set_folder_id(AllowedServicePermissions[token + '-' + action.permission()]);
253254
} else {
254-
SetAccessDenied(response->mutable_results(), action);
255+
if (request->result_filter() == yandex::cloud::priv::accessservice::v2::BulkAuthorizeRequest::ALL_FAILED) {
256+
SetAccessDenied(response->mutable_results(), action);
257+
} else {
258+
if (!wasFoundFirstAccessDenied) {
259+
SetAccessDenied(response->mutable_results(), action);
260+
wasFoundFirstAccessDenied = true;
261+
}
262+
}
255263
}
256264
} else {
257265
SetAccessDenied(response->mutable_results(), action);

0 commit comments

Comments
 (0)