Create user ban model
Co-authored-by: Georg Gadinger <nilsding@nilsding.org>
This commit is contained in:
parent
fab007b2a2
commit
e4241d2001
|
@ -49,6 +49,11 @@ class User < ApplicationRecord
|
||||||
has_one :profile, dependent: :destroy
|
has_one :profile, dependent: :destroy
|
||||||
has_one :theme, dependent: :destroy
|
has_one :theme, dependent: :destroy
|
||||||
|
|
||||||
|
has_many :user_bans, dependent: :destroy
|
||||||
|
has_many :banned_users, class_name: 'UserBan',
|
||||||
|
foreign_key: 'banned_by_id',
|
||||||
|
dependent: :nullify
|
||||||
|
|
||||||
SCREEN_NAME_REGEX = /\A[a-zA-Z0-9_]{1,16}\z/
|
SCREEN_NAME_REGEX = /\A[a-zA-Z0-9_]{1,16}\z/
|
||||||
WEBSITE_REGEX = /https?:\/\/([A-Za-z.\-]+)\/?(?:.*)/i
|
WEBSITE_REGEX = /https?:\/\/([A-Za-z.\-]+)\/?(?:.*)/i
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
class UserBan < ApplicationRecord
|
||||||
|
belongs_to :user
|
||||||
|
belongs_to :banned_by, class_name: 'User'
|
||||||
|
end
|
|
@ -0,0 +1,28 @@
|
||||||
|
class CreateUserBans < ActiveRecord::Migration[5.2]
|
||||||
|
def up
|
||||||
|
create_table :user_bans do |t|
|
||||||
|
t.bigint :user_id
|
||||||
|
t.string :reason
|
||||||
|
t.datetime :expires_at
|
||||||
|
t.bigint :banned_by_id, nullable: true
|
||||||
|
|
||||||
|
t.timestamps
|
||||||
|
end
|
||||||
|
|
||||||
|
# foxy's functional fqueries
|
||||||
|
execute "INSERT INTO user_bans
|
||||||
|
(user_id, reason, expires_at, created_at, updated_at)
|
||||||
|
SELECT users.id, users.ban_reason, users.banned_until, users.updated_at, NOW() FROM users
|
||||||
|
WHERE banned_until IS NOT NULL AND NOT permanently_banned;"
|
||||||
|
|
||||||
|
|
||||||
|
execute "INSERT INTO user_bans
|
||||||
|
(user_id, reason, expires_at, created_at, updated_at)
|
||||||
|
SELECT users.id, users.ban_reason, NULL, users.updated_at, NOW() FROM users
|
||||||
|
WHERE permanently_banned;"
|
||||||
|
end
|
||||||
|
|
||||||
|
def down
|
||||||
|
drop_table :user_bans
|
||||||
|
end
|
||||||
|
end
|
|
@ -248,6 +248,15 @@ ActiveRecord::Schema.define(version: 2021_12_28_135426) do
|
||||||
t.index ["user_id", "code"], name: "index_totp_recovery_codes_on_user_id_and_code"
|
t.index ["user_id", "code"], name: "index_totp_recovery_codes_on_user_id_and_code"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
create_table "user_bans", force: :cascade do |t|
|
||||||
|
t.bigint "user_id"
|
||||||
|
t.string "reason"
|
||||||
|
t.datetime "expires_at"
|
||||||
|
t.bigint "banned_by_id"
|
||||||
|
t.datetime "created_at", null: false
|
||||||
|
t.datetime "updated_at", null: false
|
||||||
|
end
|
||||||
|
|
||||||
create_table "users", id: :bigint, default: -> { "gen_timestamp_id('users'::text)" }, force: :cascade do |t|
|
create_table "users", id: :bigint, default: -> { "gen_timestamp_id('users'::text)" }, force: :cascade do |t|
|
||||||
t.string "email", default: "", null: false
|
t.string "email", default: "", null: false
|
||||||
t.string "encrypted_password", default: "", null: false
|
t.string "encrypted_password", default: "", null: false
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
require 'rails_helper'
|
||||||
|
|
||||||
|
RSpec.describe UserBan, type: :model do
|
||||||
|
pending "add some examples to (or delete) #{__FILE__}"
|
||||||
|
end
|
Loading…
Reference in New Issue