-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Problem med role som scope #151
Comments
Om jag förstått det rätt är det inte restful ifall vi har rollen sparat i en sessionvariabel. Länken skriver lite om restful och varför det är bra. Jag tycker däremot det är minst lika oroande att alla path_helpers måste ha en roll som parameter, mycket riktigt är det ju jättemånga sidor där man inte har en roll mer än att man är en användare. Tror du inte det finns någon lösning på detta då bara? Tyvärr kan jag inte hjälpa så mycket med det tekniska, eftersom jag knappt vet vad pathhelpers är för något i rails. Men om vi kunde lösa detta istället för att gå över till sessionlösningen skulle jag vara jättenöjd. Det skulle ju också fixa båda dina punkter. |
Förresten, nog bäst att göra en "call to arms": @oleander @spontus @karinsofia @anjonas ! |
EDIT: rättade den genererade pathen Pathhelpers används för att generera en länk till en viss resource. Till exempel Pathhelpers genereras från En fundering gällande att köra restful
|
Angående din fundering: Jag tror vi kan köra på att icke-scopade sidor bara visar icke-scopade länkar. Jag oroar mig inte så mycket för det, för jag tror det är väldigt sällan man går från en scopad till en icke-scopad sida. När skulle det vara? Enda icke-scopade sidan jag kommer på är den du skriver upp ditt riktiga namn och sån user-information. Finns väll inget som är gemensamt för alla tre roler i övrigt eller? Förresten, tror du inte vi bara kan ha två uppsättningar path_hepers, alltså en som är för scopade sidor och en som är för ickescopade? Dom scopade t.ex. |
Ja, det kan nog vara så att vi inte behöver scopade länkar i icke-scopade sidor. Men jag är inte lika säker som du. Gällande path helpers så stämmer det att bäst vore det om vi kunde ta alla routes som ligger innanför |
Ja, vi får nog fundera på det och låta det smälta lite innan vi beslutar huruvida man länkar mellan scopesidtyperna. hmm. Vi kanske ska höra ifall @oleander redan har en lösning på detta, annars känns det som att det borde gå att ordna rätt enkelt (så som man brukar säga om allt :)). |
Vad sägs om de här?
module ApplicationHelper
#
# Adds {params[:role]} to every path
# that ends with _path and starts with _role
# If no role is found in the given url, try to
# find a role in any of the given arguments ({args})
#
# Example 1:
# Current url: /student/labs
# role_course_lab_group_labs_path(course, group)
# => "/student/courses/1/lab_groups/1/labs"
#
# Example 2:
# Current url: /examiner/labs
# role_course_lab_group_labs_path(course, group)
# => "/examiner/courses/1/lab_groups/1/labs"
#
# Example 3: (User is a student in {course}):
# Current url: /labs
# role_course_lab_group_labs_path(course, group)
# => "/student/courses/1/lab_groups/1/labs"
#
# @method Symbol Non existing path
# @args Array<?> A list of arguments
# @return String Absolute path (wihout current host) to {method}
# @todo Write some specs
#
def method_missing(method, *args, &block)
return super unless method =~ /^role_.+_path$/
# Do we have a role?
# If not, does any of the given arguments contain one?
params[:role] ||= args.select{ |a| a.is_a?(GivenCourse) }.first.
try(:role_for_user, current_user)
unless params[:role]
raise "I'm not sure what to do"
end
# Remove _role in front of {method} and call helper method
send(method.to_s.gsub(/^role_/, ""), params[:role], *args)
end
end
class GivenCourse < ActiveRecord::Base
#
# @current_user User
# @return String Current role for @current_user
# @todo Implement and write some specs
#
def role_for_user(current_user)
"student"
end
end |
Jag gillar lösningen, ser fräsch ut vid första anblick! |
Vid diskussioner kom vi fram till detta (kopierat från mötesprotokoll):
|
Att hämta role på basis av scope i url:er är bra på många sätt, men ställer även till problem.
Exempel:
Session#new
känns som att det ska ligga utanför roll-scopet. Men eftersom många path helpers kräver en roll som parameter, så pajar alla dom när man går in på en sida utan roll-scope. Nu var det inte ett klockrent exempel, men poängen är att om vi i framtiden vill ha en icke-scopad sida för inloggade användare så kommer vi att till exempel behöva en separat navigeringspartial bara för den.Jag tycker att detta talar för att vi inför current_role som en variabel i
session
eller i en cookie istället. Actions som inte är olika beroende på vilken roll vi har kan då strunta i att läsa den variabeln. Pathhelpers blir enklare att använda eftersom roll-hanteringen läggs utanför url:en.Vad säger ni?
The text was updated successfully, but these errors were encountered: