mirror of
https://github.com/Relintai/rcpp_framework.git
synced 2025-04-20 01:43:12 +02:00
RBAC default entries are now created on migrate. Also basic simple default rank implementation.
This commit is contained in:
parent
af266e345d
commit
a9b3fbdece
@ -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;
|
||||
}
|
||||
|
||||
|
@ -78,6 +78,7 @@ public:
|
||||
protected:
|
||||
static RBACController *_self;
|
||||
|
||||
int _default_rank_id;
|
||||
std::map<int, Ref<RBACRank> > _ranks;
|
||||
|
||||
struct PermissionEntry {
|
||||
|
@ -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() {
|
||||
|
@ -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();
|
||||
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user