Skip to content

Commit e0e6d83

Browse files
committed
review chgs nr. 12, incl: document idx_ private member
1 parent be363fd commit e0e6d83

File tree

1 file changed

+24
-26
lines changed

1 file changed

+24
-26
lines changed

libirods_rule_engine_plugin-indexing.cpp

Lines changed: 24 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -765,12 +765,20 @@ namespace {
765765

766766
private:
767767

768+
// Data structures used in tracking user/group permissions.
769+
768770
std::map<std::string,std::string> users_{}, groups_{};
769771
std::map<std::string,std::list<std::string>> members_{};
770772
std::map<std::string,int> user_entry_{};
771773
std::multimap<int,std::string> user_perms_{}, group_perms_{};
772774
std::string owner_{};
773775

776+
// idx_ is both:
777+
// - an index into the target permissions array (in the JSON) when filling that element.
778+
// - an internal flag which, when non-zero, means that the user permissions tracking data structures have been computed.
779+
// It is used by `reset_perms', thus also indirectly by `calc_perm_info', to determine the need to re-initialize those
780+
// structures before (re-)computation.
781+
774782
int idx_{0};
775783

776784
rsComm_t *conn{};
@@ -783,15 +791,6 @@ namespace {
783791

784792
bool is_group( const std::string& gid ) {
785793
return groups_.find(gid) != groups_.end();
786-
/*
787-
try {
788-
groups_.at(gid);
789-
}
790-
catch (const std::out_of_range&) {
791-
return false;
792-
}
793-
return true;
794-
*/
795794
}
796795

797796
// Is the given user a member of the given group ?
@@ -801,9 +800,8 @@ namespace {
801800
const auto& user_list = members_.at(group_id);
802801
return std::find( user_list.begin(), user_list.end(), user_id) != user_list.end();
803802
}
804-
catch (...) {
805-
std::cerr << ("unknown error\n");
806-
throw;
803+
catch (const std::out_of_range&) {
804+
irods::log(LOG_ERROR, fmt::format("'{}' is not a group id", group_id));
807805
}
808806
return false;
809807
}
@@ -813,14 +811,14 @@ namespace {
813811
// Helper method. Reset the data structures that track existing permissions.
814812

815813
void calc_user_info() {
816-
irods::query q{conn, "select USER_GROUP_NAME,USER_GROUP_ID,USER_NAME,USER_ID"};
817-
for (const auto & c:q) {
818-
if (c[1] != c[3]) {
819-
members_[c[1]].push_back(c[3]);
820-
groups_[c[1]]=c[0];
814+
irods::query q{ conn, "select USER_GROUP_NAME,USER_GROUP_ID,USER_NAME,USER_ID"};
815+
for (const auto& row : q) {
816+
if (row[1] != row[3]) {
817+
members_[row[1]].push_back(row[3]);
818+
groups_[row[1]]=row[0];
821819
}
822820
else {
823-
users_[c[3]]=c[2];
821+
users_[row[3]]=row[2];
824822
}
825823
}
826824
}
@@ -851,7 +849,7 @@ namespace {
851849
// Copy constructor, preserves user, group and is-a-member information, but resets other data structures
852850
// in preparation for recomputing permissions info.
853851

854-
permissions_calculator(const permissions_calculator & x, rsComm_t *_conn)
852+
permissions_calculator(const permissions_calculator& x, rsComm_t *_conn)
855853
: users_{x.users_}
856854
, groups_{x.groups_}
857855
, members_{x.members_}
@@ -864,7 +862,7 @@ namespace {
864862

865863
void get_perms_list(nlohmann::json & j, const std::string & obj_id, const std::string & obj_type)
866864
{
867-
calc_perm_info( obj_id, obj_type);
865+
calc_perm_info( obj_id, obj_type); // idx_ member will be zero after this call.
868866

869867
for (const auto & [pm,gid] : group_perms_) {
870868
j["userPermissions"][idx_]["permission"] = perm_names.at(pm);
@@ -895,7 +893,7 @@ namespace {
895893
// Calculate ownership and permissions for the object of the given ID
896894
// Note obj_type should be either "DATA" or "COLL".
897895

898-
void permissions_calculator::calc_perm_info( const std::string & obj_id, const std::string & obj_type)
896+
void permissions_calculator::calc_perm_info(const std::string& obj_id, const std::string& obj_type)
899897
{
900898
reset_perms(); // reset the variables used to calculate owner, user_perms and group_perms
901899
// for later conversion to JSON for indexing.
@@ -932,11 +930,11 @@ namespace {
932930
or higher privilege.
933931
*/
934932
for (const auto & [uid,iperm] : user_entry_) {
935-
bool include_user = true;
936-
for (auto it = group_perms_.lower_bound(iperm); it!= group_perms_.end(); it++) {
937-
if (is_member_of(uid,it->second)) { include_user = false; break; }
938-
}
939-
if (include_user) { user_perms_.insert( make_pair(iperm, uid)); }
933+
bool include_user = true;
934+
for (auto it = group_perms_.lower_bound(iperm); it!= group_perms_.end(); it++) {
935+
if (is_member_of(uid,it->second)) { include_user = false; break; }
936+
}
937+
if (include_user) { user_perms_.insert( make_pair(iperm, uid)); }
940938
}
941939
// group_perms and user_perms are now ready for storing into the metadata index
942940
}

0 commit comments

Comments
 (0)