Grassroots Infrastructure
The Grassroots Infrastructure is a suite of computing tools to help users and developers use scientific data infrastructure that can easily be interconnected.
permission.h
Go to the documentation of this file.
1 /*
2  * permission.h
3  *
4  * Created on: 6 Dec 2023
5  * Author: billy
6  */
7 
8 #ifndef CORE_SHARED_UTIL_INCLUDE_PERMISSION_H_
9 #define CORE_SHARED_UTIL_INCLUDE_PERMISSION_H_
10 
11 #include "typedefs.h"
13 #include "linked_list.h"
14 #include "user_details.h"
15 #include "user_group.h"
16 #include "mongodb_tool.h"
17 #include "grassroots_server.h"
18 
19 
20 
21 
22 typedef enum
23 {
28 } AccessMode;
29 
30 
31 typedef struct Permisssions
32 {
34 
36 
38 
39 } Permissions;
40 
41 typedef struct PermissionsGroup
42 {
44 
46 
48 
50 
51 
52 typedef struct PermissionsManager
53 {
55 
57 
59 
61 
63 
64 #ifdef __cplusplus
65 extern "C"
66 {
67 #endif
68 
69 
70 GRASSROOTS_UTIL_API PermissionsManager *AllocatePermissionsManager (GrassrootsServer *grassroots_p, const char *database_s, const char *collection_s);
71 
72 
74 
75 
77 
79 
80 
81 GRASSROOTS_UTIL_API void FreePermissions (Permissions *permissions_p);
82 
83 
85 
86 
88 
89 
90 GRASSROOTS_UTIL_API Permissions *GetPermissionsFromJSON (const json_t *permissions_json_p, const GrassrootsServer *grassroots_p);
91 
92 
93 GRASSROOTS_UTIL_API PermissionsGroup *GetPermissionsGroupFromJSON (const json_t *permissions_group_json_p, const GrassrootsServer *grassroots_p);
94 
95 
96 GRASSROOTS_UTIL_API PermissionsGroup *GetPermissionsGroupFromChildJSON (const json_t *parent_json_p, const char * const key_s, const GrassrootsServer *grassroots_p);
97 
98 
99 GRASSROOTS_UTIL_API json_t *GetPermissionsGroupAsJSON (const PermissionsGroup *permissions_group_p, const ViewFormat vf);
100 
101 
102 GRASSROOTS_UTIL_API bool AddPermissionsGroupToJSON (const PermissionsGroup *permissions_group_p, json_t *json_p, const char * const key_s, const ViewFormat vf);
103 
104 
105 
106 GRASSROOTS_UTIL_API json_t *GetPermissionsAsJSON (const Permissions *permissions_p, const ViewFormat vf);
107 
108 
109 GRASSROOTS_UTIL_API bool AddUserToPermissions (Permissions *permissions_p, User *user_p);
110 
111 
112 GRASSROOTS_UTIL_API bool AddGroupToPermissions (Permissions *permissions_p, UserGroup *group_p);
113 
114 
115 
116 GRASSROOTS_UTIL_API void ClearPermissions (Permissions *permissions_p);
117 
125 GRASSROOTS_UTIL_API bool CheckPermissionsManagerForUser (const PermissionsManager * const permissions_manager_p, const User * const user_p, const AccessMode mode);
126 
127 
128 GRASSROOTS_UTIL_API bool CheckPermissionsGroupForUser (const PermissionsGroup * const permissions_manager_p, const User * const user_p, const AccessMode mode);
129 
130 
131 GRASSROOTS_UTIL_API bool CheckPermissionsForUser (const Permissions * const permissions_p, const User * const user_p);
132 
133 
134 GRASSROOTS_UTIL_API bool HasPermissionsSet (const Permissions * const permissions_p);
135 
136 
137 
138 GRASSROOTS_UTIL_API bool SetAccessModeFromString (AccessMode *ar_p, const char * const ar_s);
139 
140 
142 
143 
144 #ifdef __cplusplus
145 }
146 #endif
147 
148 #endif /* CORE_SHARED_UTIL_INCLUDE_PERMISSION_H_ */
ClearPermissions
void ClearPermissions(Permissions *permissions_p)
GetPermissionsGroupFromChildJSON
PermissionsGroup * GetPermissionsGroupFromChildJSON(const json_t *parent_json_p, const char *const key_s, const GrassrootsServer *grassroots_p)
AM_READ
Definition: permission.h:25
GetPermissionsAsJSON
json_t * GetPermissionsAsJSON(const Permissions *permissions_p, const ViewFormat vf)
FreePermissionsGroup
void FreePermissionsGroup(PermissionsGroup *permissions_group_p)
grassroots_util_library.h
AllocatePermissionsManager
PermissionsManager * AllocatePermissionsManager(GrassrootsServer *grassroots_p, const char *database_s, const char *collection_s)
UserGroup
A datatype to store user credentials.
Definition: user_group.h:23
GetPermissionsFromJSON
Permissions * GetPermissionsFromJSON(const json_t *permissions_json_p, const GrassrootsServer *grassroots_p)
FreePermissionsManager
void FreePermissionsManager(PermissionsManager *manager_p)
AddPermissionsGroupToJSON
bool AddPermissionsGroupToJSON(const PermissionsGroup *permissions_group_p, json_t *json_p, const char *const key_s, const ViewFormat vf)
PermissionsManager::pm_mongo_p
MongoTool * pm_mongo_p
Definition: permission.h:58
user_group.h
AddGroupToPermissions
bool AddGroupToPermissions(Permissions *permissions_p, UserGroup *group_p)
PermissionsGroup::pg_delete_access_p
Permissions * pg_delete_access_p
Definition: permission.h:47
grassroots_server.h
AM_WRITE
Definition: permission.h:26
AM_NONE
Definition: permission.h:24
PermissionsManager::pm_permissions_p
PermissionsGroup * pm_permissions_p
Definition: permission.h:60
Permissions::pe_groups_p
LinkedList * pe_groups_p
Definition: permission.h:37
MongoTool
A MongoTool is a datatype that allows access to the data stored within a MongoDB instance.
Definition: mongodb_tool.h:159
AllocatePermissionsGroup
PermissionsGroup * AllocatePermissionsGroup(void)
HasPermissionsSet
bool HasPermissionsSet(const Permissions *const permissions_p)
GetPermissionsGroupAsJSON
json_t * GetPermissionsGroupAsJSON(const PermissionsGroup *permissions_group_p, const ViewFormat vf)
PermissionsGroup::pg_read_access_p
Permissions * pg_read_access_p
Definition: permission.h:43
PermissionsGroup
Definition: permission.h:41
typedefs.h
PermissionsManager::pm_collection_s
char * pm_collection_s
Definition: permission.h:56
FreePermissions
void FreePermissions(Permissions *permissions_p)
AccessMode
AccessMode
Definition: permission.h:22
SetAccessModeFromString
bool SetAccessModeFromString(AccessMode *ar_p, const char *const ar_s)
Permissions::pe_users_p
LinkedList * pe_users_p
Definition: permission.h:35
LinkedList
A doubly-linked list that can be traversed in either direction.
Definition: linked_list.h:56
AllocatePermissions
Permissions * AllocatePermissions(AccessMode access)
AM_DELETE
Definition: permission.h:27
AddUserToPermissions
bool AddUserToPermissions(Permissions *permissions_p, User *user_p)
Permissions
Definition: permission.h:31
GrassrootsServer
Definition: grassroots_server.h:45
Permissions::pe_access
AccessMode pe_access
Definition: permission.h:33
GetAccessRightsAsString
const char * GetAccessRightsAsString(const AccessMode ar)
User
A datatype to store user credentials.
Definition: user_details.h:40
user_details.h
PermissionsGroup::pg_write_access_p
Permissions * pg_write_access_p
Definition: permission.h:45
CheckPermissionsManagerForUser
bool CheckPermissionsManagerForUser(const PermissionsManager *const permissions_manager_p, const User *const user_p, const AccessMode mode)
linked_list.h
A doubly-linked list.
PermissionsManager::pm_database_s
char * pm_database_s
Definition: permission.h:54
ViewFormat
ViewFormat
An indicator of what the output destination is for the JSON data values.
Definition: view_format.h:19
CheckPermissionsGroupForUser
bool CheckPermissionsGroupForUser(const PermissionsGroup *const permissions_manager_p, const User *const user_p, const AccessMode mode)
PermissionsManager
Definition: permission.h:52
GRASSROOTS_UTIL_API
#define GRASSROOTS_UTIL_API
Definition: grassroots_util_library.h:47
mongodb_tool.h
GetPermissionsGroupFromJSON
PermissionsGroup * GetPermissionsGroupFromJSON(const json_t *permissions_group_json_p, const GrassrootsServer *grassroots_p)
CheckPermissionsForUser
bool CheckPermissionsForUser(const Permissions *const permissions_p, const User *const user_p)