# Ruby基于Rails框架实现多角色权限管理与数据分页查询完整实战代码案例

简介: 本项目基于Rails 7实现RBAC多角色权限管理(超级管理员/运营/员工)与通用分页查询,集成Devise认证、CanCanCan鉴权及Kaminari分页,代码规范、零重型依赖,开箱即用。(239字)

Ruby基于Rails框架实现多角色权限管理与数据分页查询完整实战代码案例

一、项目概述

本案例基于Ruby on Rails 7开发,搭建一套后台管理系统核心能力:多角色RBAC权限控制+列表分页查询功能。系统划分超级管理员、运营管理员、普通员工三类角色,不同角色访问页面、操作数据权限隔离;同时封装通用分页工具类,适配所有数据表列表查询,降低重复编码成本。整套代码遵循Rails MVC规范,使用Devise做用户登录、CanCanCan实现权限校验,无第三方重型组件依赖,可直接迁移至生产环境。

二、环境依赖

  • Ruby 3.2.2
  • Rails 7.1.0
  • 数据库:PostgreSQL 14
  • 核心Gem依赖
    # Gemfile
    gem 'devise'          # 用户登录认证
    gem 'cancancan'       # RBAC权限控制
    gem 'kaminari'        # 分页插件
    gem 'pg'              # 数据库驱动
    gem 'bcrypt'
    
    执行安装命令:
    bundle install
    rails db:create && rails db:migrate
    

三、数据库模型设计

1. 用户、角色、权限关联迁移文件

# db/migrate/20260101000000_create_roles.rb
class CreateRoles < ActiveRecord::Migration[7.1]
  def change
    create_table :roles do |t|
      t.string :name, null: false, unique: true
      t.text :permissions, array: true, default: []
      t.timestamps
    end
  end
end

# db/migrate/20260101000001_add_role_id_to_users.rb
class AddRoleIdToUsers < ActiveRecord::Migration[7.1]
  def change
    add_reference :users, :role, foreign_key: true
  end
end

2. 模型代码

Role角色模型

# app/models/role.rb
class Role < ApplicationRecord
  serialize :permissions, Array
  validates :name, presence: true, uniqueness: true

  # 判断角色是否拥有指定权限
  def has_perm?(perm_code)
    permissions.include?(perm_code)
  end
end

User用户模型(集成Devise)

# app/models/user.rb
class User < ApplicationRecord
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :validatable
  belongs_to :role

  delegate :has_perm?, to: :role

  # 校验当前用户权限
  def can_operate?(perm)
    role&.has_perm?(perm) || false
  end
end

3. 权限能力定义(Ability权限配置)

# app/models/ability.rb
class Ability
  include CanCan::Ability
  def initialize(user)
    user ||= User.new
    if user.can_operate?('super_admin')
      can :manage, :all
    elsif user.can_operate?('operation')
      can [:read, :update], User
      can [:read, :create, :update], Order
      cannot :destroy, :all
    elsif user.can_operate?('staff')
      can :read, Order
      cannot [:create, :update, :destroy], User
    end
  end
end

四、通用分页工具封装

封装全局分页方法,统一分页参数、数据返回格式

# app/controllers/concerns/pagination_helper.rb
module PaginationHelper
  extend ActiveSupport::Concern

  included do
    helper_method :paginate_data
  end

  # 通用分页处理
  def paginate_data(model_scope, page_size = 10)
    page = params[:page] || 1
    model_scope.page(page).per(page_size)
  end
end

五、业务控制器实现(订单列表示例)

# app/controllers/orders_controller.rb
class OrdersController < ApplicationController
  load_and_authorize_resource # CanCan自动校验权限
  include PaginationHelper

  # 分页订单列表
  def index
    @orders = paginate_data(Order.order(created_at: :desc), 15)
    render json: {
   
      code: 200,
      data: @orders,
      total: @orders.total_count,
      page: params[:page] || 1,
      page_size: 15
    }
  end

  private
  def order_params
    params.require(:order).permit(:order_no, :amount, :status)
  end
end

六、路由配置

# config/routes.rb
Rails.application.routes.draw do
  devise_for :users
  resources :orders, only: [:index, :create, :update]
end

七、初始化测试角色数据

# db/seeds.rb
# 超级管理员角色
Role.create!(name: 'super_admin', permissions: %w[super_admin user_create user_delete order_manage])
# 运营管理员
Role.create!(name: 'operation', permissions: %w[operation user_read order_create order_update])
# 普通员工
Role.create!(name: 'staff', permissions: %w[staff order_read])

# 创建测试管理员用户
super_role = Role.find_by(name: 'super_admin')
User.create!(
  email: 'admin@test.com',
  password: '12345678',
  role: super_role
)

执行初始化数据:rails db:seed

八、功能测试说明

  1. 登录校验:访问 /users/sign_in 输入账号密码登录,未登录会自动跳转登录页;
  2. 权限拦截:普通员工访问订单编辑接口,CanCanCan抛出权限异常,返回403;
  3. 分页接口请求示例:GET /orders?page=1,返回分页列表、总条数、页码信息;
  4. 扩展方式:新增角色仅需在seeds新增Role记录,配置对应权限编码即可,无需修改控制器逻辑。

九、优化拓展方案

  1. 前端增加权限按钮渲染判断,无权限按钮隐藏;
  2. 分页工具增加排序、模糊查询参数封装;
  3. 增加接口全局异常捕获,统一返回错误JSON格式;
  4. 缓存角色权限数据,减少数据库查询次数,提升接口响应速度。

海量精选技术文档和实战案例持续更新,敬请关注【风骏时光少年】

相关文章
|
4月前
|
存储 自然语言处理 数据可视化
面向慢病管理的智能Skill记忆体系:跨轮次交互、结构化数据与健康图谱构建.146
本文阐述慢病管理中Skill状态持久化技术:通过为大模型注入用户唯一标识、结构化数据存储与医学规则,解决其无记忆、无结构化能力等缺陷,实现血糖/血压等跨轮次追踪、多技能融合及个人健康图谱构建,推动大模型从通用对话工具升级为专业慢病管理智能体。
320 1
面向慢病管理的智能Skill记忆体系:跨轮次交互、结构化数据与健康图谱构建.146
|
4月前
|
存储 运维 数据可视化
SOCKS5动态代理科普:原理、搭建方式与运维痛点解决方案
SOCKS5动态代理是兼容性强、支持全流量转发的通用代理协议。SSH动态代理无需额外部署,仅靠SSH隧道即可实现内网穿透、异地调试与安全上网。传统方案存在连接冗余、管理混乱等痛点,而SSHXTERM创新支持复用已有SSH会话创建多代理,提供可视化管理、加密存储与轻量运行,大幅提升运维效率。(239字)
690 7
|
4月前
|
运维 应用服务中间件 网络安全
宝塔服务器报错全覆盖排查指南:新手不用盲猜,按步骤快速修复网站/面板故障
宝塔面板本身稳定性极强,绝大多数报错并非面板BUG,而是端口策略、系统资源、网站代码、权限配置四类问题。 运维排查核心思想:先外网,后内网;先系统,后服务;先日志,后重装。遇到报错不要慌乱,按照本文流程一步步定位,无需专业运维功底,也能独立
965 6
|
4月前
|
机器学习/深度学习 人工智能 算法
4类马铃薯品质缺陷检测数据集(瘀伤薯/裂纹薯/发芽薯/正常马铃薯)分享
本数据集含2200张实拍图像,涵盖瘀伤薯、裂纹薯、发芽薯及正常马铃薯4类,YOLO标准格式,人工精标,适用于智能分拣、农业质检与目标检测研究。
|
4月前
|
缓存 人工智能 自然语言处理
阿里云Qwen 3.7 Plus与Max对比:性价比、推理能力与多模态能力实测报告
阿里云Qwen 3.7系列包含Plus与Max两款核心模型,共享100万Tokens超长上下文窗口与35小时自治执行上限,但在模态能力、底层架构、输出上限与资费标准上存在本质差异,分别面向不同量级与类型的AI应用场景。2026年,两款模型成为企业与开发者选择大模型服务的核心选项,本文基于实测数据,从基础参数、性价比、文本推理能力、多模态能力、适用场景等维度全面解析两者差异,为选型提供客观参考。
575 2
|
4月前
|
人工智能 开发工具 开发者
VS Code 用了 5 年的功能,Zed 1.6刚做出来就直接封神了
Zed编辑器v1.6推出提交历史分栏Diff切换功能:支持单栏流式与左右分栏双模式自由切换,直观对比代码变更,无需外接工具;深度集成Git面板,提升审查效率、降低理解成本,强化一站式开发体验。(239字)
421 1
|
4月前
|
存储 运维 安全
240 亿条泄露凭证库安全事件成因、攻击链路与全域防护体系研究
本文剖析2026年240亿条(8.3TB)被盗凭证库事件,揭示Infostealer木马窃取、Elasticsearch无鉴权裸漏、ClickFix社工攻击三重叠加风险,配套三类可复现代码,提出覆盖服务器加固、终端拦截、社工识别、监测预警、用户宣教的五层全域防护体系。(239字)
418 0
|
4月前
|
人工智能 弹性计算 开发者
阿里云 618 时间、入口及内容政策详解
阿里云618已全面拉开帷幕,本次活动以“AI加速季,智惠生产力”为主题,不仅延续了云服务器的高额补贴,更史无前例地将AI算力与大模型纳入核心优惠矩阵。对于个人开发者、中小企业主以及AI创业团队而言,这是低成本上云与拥抱AI的最佳时机。
791 0
|
4月前
|
人工智能 编解码 物联网
设计师的AI生产力革命:阿里云通义AIGC平台完全指南
本文面向平面/UI/UX设计师、插画师等视觉工作者,零门槛讲解阿里云通义AIGC平台:解析Stable Diffusion、ComfyUI、LoRA、50万GU等核心概念,手把手教学注册→Prompt撰写→出图→工作流搭建,覆盖电商图、海报、品牌设计等六大实战场景,助你从执行者升级为创意指挥官。(239字)
|
4月前
|
机器学习/深度学习 人工智能 运维
3类电力绝缘子缺陷检测数据集分享(破损绝缘子/污闪绝缘子/正常绝缘子)
本数据集含12000张真实输电线路实拍图像,标注3类绝缘子状态(破损/污闪/正常),YOLO标准格式,覆盖多光照、天气与视角,适用于YOLO系列等模型训练,支撑智能巡检、无人机检测与电力AI科研。

热门文章

最新文章