-
-
Save dapi/747552 to your computer and use it in GitHub Desktop.
class AddTypusAttributesToUsers < ActiveRecord::Migration | |
def self.up | |
add_column :users, :role, :string | |
add_column :users, :status, :boolean, :null=>false, :default=>true | |
User.find(1).update_attribute(:role,'admin') | |
end | |
def self.down | |
remove_column :users, :role | |
remove_column :users, :status | |
end | |
end |
class User < ActiveRecord::Base | |
# Include default devise modules. Others available are: | |
# :token_authenticatable, :encryptable, :confirmable, :lockable, :timeoutable and :omniauthable | |
devise :database_authenticatable, :registerable, | |
:recoverable, :rememberable, :trackable, :validatable | |
# Setup accessible (or protected) attributes for your model | |
attr_accessible :nick, :email, :password, :password_confirmation, :remember_me | |
validates_uniqueness_of :nick | |
# | |
# Typus adaptation | |
# | |
enable_as_typus_user | |
ROLE = Typus::Configuration.roles.keys.sort | |
LANGUAGE = Typus.locales | |
def self.authenticate(email, password) | |
resource = find_for_database_authentication({ :email=>email }) | |
resource && resource.valid_password?( password ) ? resource : nil | |
end | |
# Typus redefines it | |
def password_required? | |
true | |
end | |
def first_name | |
end | |
def last_name | |
end | |
def preferences | |
'' | |
end | |
end |
There's a kind of adapter ... in fact, you can enable which kind of authentication you want to use: none
, http_basic
and session
. The problem is that is not clear enough as I'm not showing that configuration setting unless you have used the typus:migration
generator.
You can see where it's called the authentication mechanism here.
I guess if Typus.authentication returned 'devise_session' and there was the appropriate
Typus::Authentication::DeviseSession
class around it might work.
However there are some spots in your views where you hard code routes instead of delegating to the adapter.
----------------------
app/views/admin/helpers/_login_info.html.erb
----------------------
1 <ul>
2 <li><%= Typus::I18n.t("Logged as") %> <%= link_to admin_user.name, { :controller => "/admin/#{Typus.user_class.to_resource}", :action => 'edit', :id => admin_user.id } %></li>
3 <li><%= link_to Typus::I18n.t("Sign out"), admin_session_path, :confirm => Typus::I18n.t("Are you sure you want to sign out and end your session?"), :method => :delete %></li>
4 </ul>
for instance
"/admin/#{Typus.user_class.to_resource}"
is the trouble bit
I started to extract the authentication mechanisms to make easier to integrate with other systems, but I must say I have never integrated devise with typus because I'm using the session
mechanism.
I accept pull requests fixing that stuff, so feel free to work on that if you want.
I've pushed a branch which adds devise
support to Typus.
Works well. Thanks :)
This has got me 9/10 of the way there. However I think the authentication mechanism that typus uses could be factored out into some kind of adapter pattern which could be registered in the config file but I didn't get that far.