Yamlでデータを操作する

先日、データをyamlファイルに保存する問題を解決し、ユーザーがこのデータを編集できるようにしました。 ユーザーは異なるアクセス権を持っていたため、すべてが少し複雑でした。 格納する各行について、どのユーザーがこの行を編集するためのアクセス権を持っているかに関する情報が利用可能でなければなりません。



そのような設定ファイルの例を次に示します。



--- api_url: value: example.com/api role: 4 api_login: value: user role: 4 api_password: value: 12355 role: 4
      
      







この場合、APIへのアクセスに関する情報を格納する3つの変数があります。 各キーは、変数の値と、このデータにアクセスできるユーザーの最小の役割を格納するハッシュです。



次に、システム内のユーザー権限を考慮して、このデータを読み取りおよび編集できるクラスを作成します。



 require 'yaml' class Setting CONFIG_FILE = 'settings.yml' class << self def get(key) load_settings[key.to_s]['value'] end def update(params, role) settings = load_settings params.each do |key, value| key = key.to_s settings[key]['value'] = value.to_s if has_access?(role, key) end save_settings(settings) end def has_access?(role, key) return unless setting = load_settings[key] role >= setting['role'] end def load_settings @config ||= YAML.load(File.read(file_path)) end private def save_settings(settings) File.write(file_path, settings.to_yaml) end def file_path "config/#{CONFIG_FILE}" end end end
      
      







キーデータは次のように取得できます。

 Setting.get('api_login') Setting.get('api_password') …
      
      







データはユーザー権限を考慮して更新されます。つまり、クラス外のチェックは不要です。 データと一緒にハッシュを転送するだけで、ユーザーが編集できるデータが更新されます。 これにより、ユーザーが入力したすべてのデータを安全に転送できます。

 Setting.update(params[:settings], current_user.role)
      
      







更新が必要な情報と現在のユーザー権限を含むハッシュを渡します。



Railsでこれを行うと、設定ファイルへのパスを保存するメソッドをより便利に設定できます。

 Rails.root.join('config', CONFIG_FILE)
      
      






All Articles