mirror of
https://github.com/Relintai/rcpp_framework.git
synced 2025-04-20 01:43:12 +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("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) {
|
||||
@ -593,6 +594,10 @@ Ref<RBACRank> RBACController::get_default_rank() {
|
||||
return _ranks[get_default_rank_id()];
|
||||
}
|
||||
|
||||
String &RBACController::get_redirect_url() {
|
||||
return _redirect_url;
|
||||
}
|
||||
|
||||
bool RBACController::continue_on_missing_default_rank() {
|
||||
//todo, add setting
|
||||
return false;
|
||||
|
@ -68,6 +68,8 @@ public:
|
||||
int get_default_rank_id();
|
||||
Ref<RBACRank> get_default_rank();
|
||||
|
||||
String &get_redirect_url();
|
||||
|
||||
bool continue_on_missing_default_rank();
|
||||
|
||||
static RBACController *get_singleton();
|
||||
@ -80,6 +82,7 @@ protected:
|
||||
|
||||
int _default_rank_id;
|
||||
std::map<int, Ref<RBACRank> > _ranks;
|
||||
String _redirect_url;
|
||||
|
||||
struct PermissionEntry {
|
||||
String name;
|
||||
|
@ -12,7 +12,8 @@ enum RBACDefaultPermissions {
|
||||
};
|
||||
|
||||
enum RBACDefaultRankPermissions {
|
||||
RBAC_PERMISSION_ADMIN_PANEL = 1 << 0,
|
||||
RBAC_RANK_PERMISSION_ADMIN_PANEL = 1 << 0,
|
||||
RBAC_RANK_PERMISSION_USE_REDIRECT = 1 << 1,
|
||||
};
|
||||
|
||||
#endif
|
@ -149,6 +149,11 @@ int RBACModel::get_default_rank() {
|
||||
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() {
|
||||
Ref<TableBuilder> tb = DatabaseManager::get_singleton()->ddb->get_table_builder();
|
||||
|
||||
@ -198,7 +203,7 @@ void RBACModel::create_default_entries() {
|
||||
|
||||
admin->name = "Admin";
|
||||
admin->base_permissions = RBAC_PERMISSION_ALL;
|
||||
admin->rank_permissions = RBAC_PERMISSION_ADMIN_PANEL;
|
||||
admin->rank_permissions = RBAC_RANK_PERMISSION_ADMIN_PANEL;
|
||||
|
||||
save_rank(admin);
|
||||
|
||||
@ -216,7 +221,7 @@ void RBACModel::create_default_entries() {
|
||||
|
||||
guest->name = "Guest";
|
||||
guest->base_permissions = RBAC_PERMISSION_READ;
|
||||
guest->rank_permissions = 0;
|
||||
guest->rank_permissions = RBAC_RANK_PERMISSION_USE_REDIRECT;
|
||||
|
||||
save_rank(guest);
|
||||
}
|
||||
|
@ -20,6 +20,7 @@ public:
|
||||
virtual void save_rank(const Ref<RBACRank> &rank);
|
||||
virtual void save_permission(const Ref<RBACPermission> &permission);
|
||||
virtual int get_default_rank();
|
||||
virtual String get_redirect_url();
|
||||
|
||||
void create_table();
|
||||
void drop_table();
|
||||
|
@ -8,6 +8,10 @@ bool RBACRank::has_permission(Request *request, const int permission) {
|
||||
return (base_permissions & permission) != 0;
|
||||
}
|
||||
|
||||
bool RBACRank::has_rank_permission(const int permission) {
|
||||
return (rank_permissions & permission) != 0;
|
||||
}
|
||||
|
||||
void RBACRank::sort_permissions() {
|
||||
for (int i = 0; i < permissions.size(); ++i) {
|
||||
for (int j = i + 1; j < permissions.size(); ++j) {
|
||||
|
@ -26,6 +26,7 @@ public:
|
||||
Vector<Ref<RBACPermission> > permissions;
|
||||
|
||||
bool has_permission(Request *request, const int permission);
|
||||
bool has_rank_permission(const int permission);
|
||||
|
||||
void sort_permissions();
|
||||
|
||||
|
@ -67,7 +67,10 @@ void RBACUserController::rbac_default_user_session_middleware(Object *instance,
|
||||
}
|
||||
|
||||
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);
|
||||
return;
|
||||
|
Loading…
Reference in New Issue
Block a user