hiroaki514 / BeeBits

0 stars 0 forks source link

【機能改修】アカウントの利用制限機能 #205

Open hiroaki514 opened 2 months ago

hiroaki514 commented 2 months ago

各アカウントへの機能利用制限機能を追加

・投稿 ・閲覧 ・DM

yoshichiba commented 1 month ago

こちらReact関係なく、Railsで実装できるものなのでこちらを進めていただけると助かります🙇‍♂️

イメージとしては以下の手順で実装が可能かと思います。

1. 利用制限の各カラムをusersテーブルに追加

class AddRestrictionsToUserss < ActiveRecord::Migration[6.1]
  def change
    add_column :users, :can_post, :boolean, default: true
    add_column :users, :can_view, :boolean, default: true
    add_column :users, :can_dm, :boolean, default: true
  end
end
rails db:migrate

2. 機能制限のメソッドをモデルに追加

class User < ApplicationRecord
  # バリデーション
  validates :can_post, inclusion: { in: [true, false] }
  validates :can_view, inclusion: { in: [true, false] }
  validates :can_dm, inclusion: { in: [true, false] }

  # 機能の制限を確認するメソッド
  def can_use_feature?(feature)
    case feature
    when :post
      can_post
    when :view
      can_view
    when :dm
      can_dm
    else
      false
    end
  end
end

3. 各コントローラでの機能制限を適用

投稿、閲覧、DMのコントローラで先ほどのメソッドチェックを実行します。

# 投稿のコントローラ
class PostsController < ApplicationController
  before_action :check_post_permission, only: [:create]

  private

  def check_post_permission
    unless current_account.can_use_feature?(:post)
      redirect_to root_path, alert: "この機能は利用できません。"
    end
  end
end

4. ビューでの制御

コントローラでの制限に加え、ビューでも制限を加えておきます。

<% if current_account.can_use_feature?(:post) %>
  <%= link_to '新規投稿', new_post_path %>
<% else %>
  <p>投稿機能は制限されています。</p>
<% end %>