Внедрение системы контроля доступа на основе ролей (RBAC) в ERP-систему

ERP
RBAC
Безопасность

Расширение существующей системы аутентификации путем внедрения более детализированного контроля доступа на основе ролей (RBAC) позволяет гибко настраивать права доступа для различных групп пользователей.

Ключевые преимущества RBAC

  • Упрощение управления правами доступа
  • Гибкая настройка ролей для разных пользовательских групп
  • Повышение безопасности системы

Архитектурные компоненты

  • Таблица пользователей
  • Таблица ролей
  • Таблица разрешений

SQL-скрипт для создания таблиц RBAC

CREATE TABLE permissions (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255) NOT NULL UNIQUE,
    description TEXT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

CREATE TABLE role_permissions (
    id INT AUTO_INCREMENT PRIMARY KEY,
    role_id INT NOT NULL,
    permission_id INT NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (role_id) REFERENCES roles(id) ON DELETE CASCADE,
    FOREIGN KEY (permission_id) REFERENCES permissions(id) ON DELETE CASCADE,
    UNIQUE KEY unique_role_permission (role_id, permission_id)
);

INSERT INTO permissions (name, description) VALUES
('view_users', 'Просмотр списка пользователей'),
('edit_users', 'Редактирование пользователей'),
('delete_users', 'Удаление пользователей'),
('view_reports', 'Просмотр отчетов'),
('generate_reports', 'Генерация отчетов'),
('manage_roles', 'Управление ролями'),
('access_admin_panel', 'Доступ к админ панели');
      

Модели Kohana для RBAC

Модель Permission

class Model_Permission extends ORM {
    protected $_table_name = 'permissions';
    
    protected $_has_many = array(
        'role_permissions' => array('foreign_key' => 'permission_id'),
    );
}
          

Модель RolePermission

class Model_RolePermission extends ORM {
    protected $_table_name = 'role_permissions';
    
    protected $_belongs_to = array(
        'role' => array('foreign_key' => 'role_id'),
        'permission' => array('foreign_key' => 'permission_id'),
    );
}
          

Логика проверки разрешений

Контроллер с проверкой прав

public function action_view_reports() {
    if (!$this->current_user->has_permission('view_reports')) {
        throw new HTTP_Exception_403('Доступ запрещен');
    }
    
    // Логика отображения отчетов
    $reports = Model_Report::get_all();
    $this->response->body(View::factory('reports/view')->set('reports', $reports));
}
          

Метод проверки разрешений

public function has_permission($permission_name) {
    $user_roles = $this->roles;
    
    foreach ($user_roles as $role) {
        if ($role->has_permission($permission_name)) {
            return TRUE;
        }
    }
    
    return FALSE;
}
          

Интерфейс управления ролями и разрешениями

Создание роли

Добавьте новую роль с уникальным названием и описанием.

Назначение разрешений

Выберите разрешения для конкретной роли.

Управление пользователями

Назначайте роли пользователям для контроля доступа.

Таблица разрешений

Разрешение Описание Действия
view_users Просмотр списка пользователей
edit_users Редактирование пользователей
manage_roles Управление ролями

Выводы и рекомендации

Преимущества внедрения RBAC

  • Упрощение управления правами доступа для администраторов
  • Повышение безопасности системы за счет детального контроля
  • Гибкая настройка доступа для разных пользовательских групп

Рекомендации по реализации

  • Используйте существующие таблицы пользователей и ролей
  • Обеспечьте полную интеграцию с текущими контроллерами
  • Проведите обучение пользователей и администраторов