[Ruby on Rails]sorceryによる認証 – (6)部署別のアクセス制限 #2 モデル
はじめに
前回に引き続き、部署別のアクセス制限をsorceryで行うサンプルについてです。今回はモデルのソースコードを取り上げます。尚、作成したサンプルは以下のGithubに置いてあります。全ソースを見たい方は参考にしてください。
sorcery_api_sample
ソースコード
前回書いたように、以前の記事でのサンプルに部署のマスタとなるdepartmentsテーブル、ユーザの所属部署を管理するuser_departmentsテーブルを追加しました。よって、それぞれのテーブルに対応するDepartmentモデル、UserDepartmentモデルを新規に作成しました。
Departmentモデル
class Department < ActiveRecord::Base has_many :user_departments ADMINISTRATOR = 10 PURCHASE = 20 end
UserDepartmentモデルと1:Nの関連になることを定義してます。また管理部・購買部のIDも定義しています。
UserDepartmentモデル
class UserDepartment < ActiveRecord::Base belongs_to :user belongs_to :department end
Userモデル、Departmentモデルとの関連を定義しており、それぞれのモデルとuser_id、department_idで紐づくようになります。
Userモデル
Userモデルは以前からあり、今回修正した箇所のみ載せておきます。
class User < ActiveRecord::Base (中略) has_one :user_department, dependent: :destroy (中略) def save_relation(department_params) if Department.exists?(department_params[:department_id]) && self.save user_department = UserDepartment.new(user_id: self.id, department_id: department_params[:department_id]) return user_department.save else false end end def update_relation(user_params, department_params) if Department.exists?(department_params[:department_id]) && self.update(user_params) return self.user_department.update(department_params) else false end end (中略)
has_one〜でUserDepartmentモデルとの関連を定義しており、これによりUserモデル.idとUserDepartmentモデル.user_idが紐づくことになります。
save_relation()メソッドはユーザ情報を新規に保存するためのメソッドです。引数で渡された部署IDが存在することを確認し、Userテーブル、UserDepartmentテーブルにデータを作成します。
update_relation()メソッドはユーザ情報を更新するためのメソッドです。save_ralation()メソッドの更新用と考えてもらえればいいかと思います。
まとめ
モデルについては以上となります。ActiveRecordの関連の機能を使い、既存テーブルを変更することなくユーザの所属部署を追加できました。