RBAC default entries are now created on migrate. Also basic simple default rank implementation.

This commit is contained in:
Relintai 2021-11-10 19:53:56 +01:00
parent af266e345d
commit a9b3fbdece
5 changed files with 45 additions and 3 deletions

View File

@ -567,6 +567,7 @@ void RBACController::clear_registered_permissions() {
void RBACController::initialize() {
_ranks = RBACModel::get_singleton()->load_ranks();
_default_rank_id = RBACModel::get_singleton()->get_default_rank();
register_permissions();
}
@ -585,8 +586,7 @@ Ref<RBACRank> RBACController::get_rank(int rank_id) {
}
int RBACController::get_default_rank_id() {
//todo
return 0;
return _default_rank_id;
}
Ref<RBACRank> RBACController::get_default_rank() {
@ -609,6 +609,8 @@ RBACController::RBACController() :
printf("RBACController::RBACController(): Error! self is not null!/n");
}
_default_rank_id = 0;
_self = this;
}

View File

@ -78,6 +78,7 @@ public:
protected:
static RBACController *_self;
int _default_rank_id;
std::map<int, Ref<RBACRank> > _ranks;
struct PermissionEntry {

View File

@ -9,6 +9,8 @@
#define RBAC_RANK_TABLE "rbac_ranks"
#define RBAC_PERMISSION_TABLE "rbac_permissions"
#include "rbac_default_permissions.h"
std::map<int, Ref<RBACRank> > RBACModel::load_ranks() {
std::map<int, Ref<RBACRank> > ranks;
@ -142,6 +144,11 @@ void RBACModel::save_permission(const Ref<RBACPermission> &permission) {
}
}
int RBACModel::get_default_rank() {
//todo, load this, and save it to a table (probably a new settings class)
return 3;
}
void RBACModel::create_table() {
Ref<TableBuilder> tb = DatabaseManager::get_singleton()->ddb->get_table_builder();
@ -182,6 +189,36 @@ void RBACModel::drop_table() {
void RBACModel::migrate() {
drop_table();
create_table();
create_default_entries();
}
void RBACModel::create_default_entries() {
Ref<RBACRank> admin;
admin.instance();
admin->name = "Admin";
admin->base_permissions = RBAC_PERMISSION_ALL;
admin->rank_permissions = RBAC_PERMISSION_ADMIN_PANEL;
save_rank(admin);
Ref<RBACRank> user;
user.instance();
user->name = "User";
user->base_permissions = RBAC_PERMISSION_READ;
user->rank_permissions = 0;
save_rank(user);
Ref<RBACRank> guest;
guest.instance();
guest->name = "Guest";
guest->base_permissions = RBAC_PERMISSION_READ;
guest->rank_permissions = 0;
save_rank(guest);
}
RBACModel *RBACModel::get_singleton() {

View File

@ -19,10 +19,12 @@ public:
virtual void save(const Ref<RBACRank> &rank);
virtual void save_rank(const Ref<RBACRank> &rank);
virtual void save_permission(const Ref<RBACPermission> &permission);
virtual int get_default_rank();
void create_table();
void drop_table();
void migrate();
virtual void create_default_entries();
static RBACModel *get_singleton();

View File

@ -66,7 +66,7 @@ void RBACUserController::rbac_default_user_session_middleware(Object *instance,
}
}
if (rank->has_permission(request, RBAC_PERMISSION_READ)) {
if (!rank->has_permission(request, RBAC_PERMISSION_READ)) {
//todo implement redirect perm
request->send_error(404);