Set up the new permission handling methods for RBACUser.

This commit is contained in:
Relintai 2022-01-06 11:34:53 +01:00
parent 839e5ef674
commit c934d36dcf
4 changed files with 52 additions and 3 deletions

View File

@ -2,10 +2,32 @@
#include "core/http/request.h"
bool RBACRank::has_permission(Request *request, const int permission) {
//todo try to find a match from the permissions array
Ref<RBACPermission> RBACRank::match_request(Request *request) {
return Ref<RBACPermission>();
}
return (base_permissions & permission) != 0;
bool RBACRank::get_permissions(Request *request) {
int perm = base_permissions;
Ref<RBACPermission> match = match_request(request);
if (match.is_valid()) {
perm = match->permissions;
}
return perm;
}
bool RBACRank::has_permission(Request *request, const int permission) {
int perm = base_permissions;
Ref<RBACPermission> match = match_request(request);
if (match.is_valid()) {
perm = match->permissions;
}
return (perm & permission) != 0;
}
bool RBACRank::has_rank_permission(const int permission) {

View File

@ -25,6 +25,9 @@ public:
Vector<Ref<RBACPermission> > permissions;
Ref<RBACPermission> match_request(Request *request);
bool get_permissions(Request *request);
bool has_permission(Request *request, const int permission);
bool has_rank_permission(const int permission);

View File

@ -1,5 +1,12 @@
#include "rbac_user.h"
int RBACUser::get_permissions(Request *request) {
if (!rbac_rank.is_valid()) {
return 0;
}
return rbac_rank->get_permissions(request);
}
bool RBACUser::has_permission(Request *request, const int permission) {
if (!rbac_rank.is_valid()) {
return false;
@ -7,6 +14,20 @@ bool RBACUser::has_permission(Request *request, const int permission) {
return rbac_rank->has_permission(request, permission);
}
int RBACUser::get_additional_permissions(Request *request) {
if (!rbac_rank.is_valid()) {
return 0;
}
return rbac_rank->rank_permissions;
}
bool RBACUser::has_additional_permission(Request *request, const int permission) {
if (!rbac_rank.is_valid()) {
return false;
}
return rbac_rank->rank_permissions & permission;
}
RBACUser::RBACUser() :
User() {

View File

@ -15,7 +15,10 @@ class RBACUser : public User {
public:
Ref<RBACRank> rbac_rank;
int get_permissions(Request *request);
bool has_permission(Request *request, const int permission);
int get_additional_permissions(Request *request);
bool has_additional_permission(Request *request, const int permission);
RBACUser();
~RBACUser();