mirror of
https://github.com/Relintai/rcpp_framework.git
synced 2025-05-02 13:47:56 +02:00
use redirect rank permission.
This commit is contained in:
parent
a9b3fbdece
commit
39f90bae9e
@ -578,7 +578,8 @@ void RBACController::register_permissions() {
|
|||||||
register_permission("Update", RBAC_PERMISSION_UPDATE);
|
register_permission("Update", RBAC_PERMISSION_UPDATE);
|
||||||
register_permission("Delete", RBAC_PERMISSION_DELETE);
|
register_permission("Delete", RBAC_PERMISSION_DELETE);
|
||||||
|
|
||||||
register_rank_permission("Admin Panel", RBAC_PERMISSION_ADMIN_PANEL);
|
register_rank_permission("Admin Panel", RBAC_RANK_PERMISSION_ADMIN_PANEL);
|
||||||
|
register_rank_permission("Use Redirect", RBAC_RANK_PERMISSION_USE_REDIRECT);
|
||||||
}
|
}
|
||||||
|
|
||||||
Ref<RBACRank> RBACController::get_rank(int rank_id) {
|
Ref<RBACRank> RBACController::get_rank(int rank_id) {
|
||||||
@ -593,6 +594,10 @@ Ref<RBACRank> RBACController::get_default_rank() {
|
|||||||
return _ranks[get_default_rank_id()];
|
return _ranks[get_default_rank_id()];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String &RBACController::get_redirect_url() {
|
||||||
|
return _redirect_url;
|
||||||
|
}
|
||||||
|
|
||||||
bool RBACController::continue_on_missing_default_rank() {
|
bool RBACController::continue_on_missing_default_rank() {
|
||||||
//todo, add setting
|
//todo, add setting
|
||||||
return false;
|
return false;
|
||||||
|
@ -68,6 +68,8 @@ public:
|
|||||||
int get_default_rank_id();
|
int get_default_rank_id();
|
||||||
Ref<RBACRank> get_default_rank();
|
Ref<RBACRank> get_default_rank();
|
||||||
|
|
||||||
|
String &get_redirect_url();
|
||||||
|
|
||||||
bool continue_on_missing_default_rank();
|
bool continue_on_missing_default_rank();
|
||||||
|
|
||||||
static RBACController *get_singleton();
|
static RBACController *get_singleton();
|
||||||
@ -80,6 +82,7 @@ protected:
|
|||||||
|
|
||||||
int _default_rank_id;
|
int _default_rank_id;
|
||||||
std::map<int, Ref<RBACRank> > _ranks;
|
std::map<int, Ref<RBACRank> > _ranks;
|
||||||
|
String _redirect_url;
|
||||||
|
|
||||||
struct PermissionEntry {
|
struct PermissionEntry {
|
||||||
String name;
|
String name;
|
||||||
|
@ -12,7 +12,8 @@ enum RBACDefaultPermissions {
|
|||||||
};
|
};
|
||||||
|
|
||||||
enum RBACDefaultRankPermissions {
|
enum RBACDefaultRankPermissions {
|
||||||
RBAC_PERMISSION_ADMIN_PANEL = 1 << 0,
|
RBAC_RANK_PERMISSION_ADMIN_PANEL = 1 << 0,
|
||||||
|
RBAC_RANK_PERMISSION_USE_REDIRECT = 1 << 1,
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
@ -149,6 +149,11 @@ int RBACModel::get_default_rank() {
|
|||||||
return 3;
|
return 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String RBACModel::get_redirect_url() {
|
||||||
|
//todo, load this, and save it to a table (probably a new settings class)
|
||||||
|
return String("/user/login");
|
||||||
|
}
|
||||||
|
|
||||||
void RBACModel::create_table() {
|
void RBACModel::create_table() {
|
||||||
Ref<TableBuilder> tb = DatabaseManager::get_singleton()->ddb->get_table_builder();
|
Ref<TableBuilder> tb = DatabaseManager::get_singleton()->ddb->get_table_builder();
|
||||||
|
|
||||||
@ -198,7 +203,7 @@ void RBACModel::create_default_entries() {
|
|||||||
|
|
||||||
admin->name = "Admin";
|
admin->name = "Admin";
|
||||||
admin->base_permissions = RBAC_PERMISSION_ALL;
|
admin->base_permissions = RBAC_PERMISSION_ALL;
|
||||||
admin->rank_permissions = RBAC_PERMISSION_ADMIN_PANEL;
|
admin->rank_permissions = RBAC_RANK_PERMISSION_ADMIN_PANEL;
|
||||||
|
|
||||||
save_rank(admin);
|
save_rank(admin);
|
||||||
|
|
||||||
@ -216,7 +221,7 @@ void RBACModel::create_default_entries() {
|
|||||||
|
|
||||||
guest->name = "Guest";
|
guest->name = "Guest";
|
||||||
guest->base_permissions = RBAC_PERMISSION_READ;
|
guest->base_permissions = RBAC_PERMISSION_READ;
|
||||||
guest->rank_permissions = 0;
|
guest->rank_permissions = RBAC_RANK_PERMISSION_USE_REDIRECT;
|
||||||
|
|
||||||
save_rank(guest);
|
save_rank(guest);
|
||||||
}
|
}
|
||||||
|
@ -20,6 +20,7 @@ public:
|
|||||||
virtual void save_rank(const Ref<RBACRank> &rank);
|
virtual void save_rank(const Ref<RBACRank> &rank);
|
||||||
virtual void save_permission(const Ref<RBACPermission> &permission);
|
virtual void save_permission(const Ref<RBACPermission> &permission);
|
||||||
virtual int get_default_rank();
|
virtual int get_default_rank();
|
||||||
|
virtual String get_redirect_url();
|
||||||
|
|
||||||
void create_table();
|
void create_table();
|
||||||
void drop_table();
|
void drop_table();
|
||||||
|
@ -8,6 +8,10 @@ bool RBACRank::has_permission(Request *request, const int permission) {
|
|||||||
return (base_permissions & permission) != 0;
|
return (base_permissions & permission) != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool RBACRank::has_rank_permission(const int permission) {
|
||||||
|
return (rank_permissions & permission) != 0;
|
||||||
|
}
|
||||||
|
|
||||||
void RBACRank::sort_permissions() {
|
void RBACRank::sort_permissions() {
|
||||||
for (int i = 0; i < permissions.size(); ++i) {
|
for (int i = 0; i < permissions.size(); ++i) {
|
||||||
for (int j = i + 1; j < permissions.size(); ++j) {
|
for (int j = i + 1; j < permissions.size(); ++j) {
|
||||||
|
@ -26,6 +26,7 @@ public:
|
|||||||
Vector<Ref<RBACPermission> > permissions;
|
Vector<Ref<RBACPermission> > permissions;
|
||||||
|
|
||||||
bool has_permission(Request *request, const int permission);
|
bool has_permission(Request *request, const int permission);
|
||||||
|
bool has_rank_permission(const int permission);
|
||||||
|
|
||||||
void sort_permissions();
|
void sort_permissions();
|
||||||
|
|
||||||
|
@ -67,7 +67,10 @@ 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
|
if (rank->has_rank_permission(RBAC_RANK_PERMISSION_USE_REDIRECT)) {
|
||||||
|
request->send_redirect(RBACController::get_singleton()->get_redirect_url());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
request->send_error(404);
|
request->send_error(404);
|
||||||
return;
|
return;
|
||||||
|
Loading…
Reference in New Issue
Block a user