I’m currently doing something similar, although I am using a completely
different user system to what radiant uses as default (it’s basically a
modified version of acts_as_authenticated and authorization plugins).
All I’ve done so far is create some custom tags that allow me to show
content based on a users roles…
USER TAGS
current_user ||= request.session[:user] ?
User.find(request.session[:user]) : nil
# This creates the <r:current_user/> namespace.
tag "current_user", :for => current_user, :expose => ['username',
'email',
'fullname',
'displayname',
'fistname',
'lastname']
tag "if_current_user" do |tag|
if current_user
tag.expand
end
end
tag "unless_current_user" do |tag|
unless current_user
tag.expand
end
end
tag "if_user_has_role" do |tag|
if current_user && (eval "current_user.is_#{tag.attr['role']}?")
tag.expand
end
end
and implement a basic login box that can be shown on all pages:
class AccountBehavior < Behavior::Base
register ‘Account System’
description %{
The Account System behaviour allows users to sign-up, login and
modify their account details
}
def find_page_by_url(url, live = true, clean = false)
@action = url.sub(@page.url, ‘’).sub(//$/, ‘’)
return @page
end
def render_page
case @action
when ‘login’
if request.post?
process_login
else
render_standard_page
end
when ‘logout’
process_logout
when ‘register’
else
render_standard_page
end
end
def render_standard_page
lazy_initialize_parser_and_context
if layout = @page.layout
parse_object(layout)
else
render_page_part(:body)
end
end
def process_login
user = User.authenticate( request.parameters[:username],
request.parameters[:password] )
if user.nil?
#flash.now[:error] = ‘Supplied username or password is incorrect’
else
request.session[:user] = user.id
render_standard_page
end
end
def process_logout
request.session[:user] = nil
render_standard_page
end
def process_register
end
define_tags do
url = request.request_uri unless request.nil?
# This is just for creating the <r:account/> namespace.
tag "account" do |tag|
tag.expand
end
end
end
my loginbox snippet then has the following:
<r:if_current_user>
Welcome back <r:current_user:fullname />
Not <r:current_user:fullname />? Then please logout
</r:if_current_user>
<r:unless_current_user>
Existing User Login
Username
Password
</r:unless_current_user>
--------------------
I have yet to code the registration form or the ability for users to
modify their details. However, this does allow me to let admin users
login directly from any page and once logged in have a direct link to
the admin area.
Much of the above may be buggy and full of bad practices as I’m fairly
new to Ruby, Rails and especially some of the more advanced stuff that
is going on throughout radiant. I hope it provides some ideas though.
Kev