我建立一個應用程序與TodoList
模型,模型相比可以是私有的(一個User
許多TodoList
S),或像一個公共組項目(許多User
s到許多TodoList
小號)。Rails的公共/私有訪問
我目前有一個布爾類型的列is_shared
,它確定TodoList
是私人的還是公共的。但是,當我嘗試處理這兩種類型的用戶訪問權限時,我的控制器變得臃腫。
有兩個獨立的模型PrivateTodoList
和PublicTodoList
會更好嗎,所以我可以使用單獨的控制器處理每種類型?
編輯:這是我的TodoListsController的一個片段:
class TodosListsController < ApplicationController
before_action :authenticate_user
before_action :set_todolist, only: [:show, :update, :destroy]
before_action :authorized?, only: [:show, :update, :destroy]
before_action :member?, only: :show
before_action :admin?, only: :update
# resourceful actions...
private
def set_todolist
@todolist = TodoList.find(params[:id])
end
def authorized?
if [email protected]_shared && @todolist.creator.id != current_user.id
json_response('Not authorized to view or edit this Todo List', :unauthorized)
end
end
def member?
if @todolist.is_shared
unless @todolist.members.find_by_id(current_user.id) ||
@todolist.admins.find_by_id(current_user.id)
json_response('You are not a member of this Todo List', :unauthorized)
end
end
end
def admin?
if @todolist.is_shared
unless @todolist.admins.find_by_id(current_user.id)
json_response('You are not an admin of this Todo List', :unauthorized)
end
end
end
end
一個問題我有兩個單獨的機型看到的是,如果你有功能撥打私人列表,公共反之亦然。您將在兩張獨立的表中保持記錄時遇到麻煩。 – Pramod
請問您是否在控制器中處理權限的方式? – Bustikiller