wobauth 3.4.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/README.md +165 -0
- data/Rakefile +30 -0
- data/app/assets/javascripts/wobauth/admin.js +13 -0
- data/app/assets/javascripts/wobauth/authorities.js.coffee +31 -0
- data/app/assets/javascripts/wobauth/groups.js +2 -0
- data/app/assets/javascripts/wobauth/memberships.js +2 -0
- data/app/assets/javascripts/wobauth/roles.js +2 -0
- data/app/assets/stylesheets/wobauth/application.css +15 -0
- data/app/assets/stylesheets/wobauth/authorities.css +4 -0
- data/app/assets/stylesheets/wobauth/groups.css +4 -0
- data/app/assets/stylesheets/wobauth/memberships.css +4 -0
- data/app/assets/stylesheets/wobauth/roles.css +4 -0
- data/app/controllers/wobauth/ad_users_controller.rb +24 -0
- data/app/controllers/wobauth/application_controller.rb +25 -0
- data/app/controllers/wobauth/authorities_controller.rb +88 -0
- data/app/controllers/wobauth/groups/authorities_controller.rb +11 -0
- data/app/controllers/wobauth/groups/memberships_controller.rb +11 -0
- data/app/controllers/wobauth/groups_controller.rb +60 -0
- data/app/controllers/wobauth/login_controller.rb +10 -0
- data/app/controllers/wobauth/memberships_controller.rb +79 -0
- data/app/controllers/wobauth/registrations_controller.rb +26 -0
- data/app/controllers/wobauth/roles_controller.rb +30 -0
- data/app/controllers/wobauth/users/authorities_controller.rb +11 -0
- data/app/controllers/wobauth/users/memberships_controller.rb +11 -0
- data/app/controllers/wobauth/users_controller.rb +76 -0
- data/app/helpers/wobauth/ad_users_helper.rb +60 -0
- data/app/helpers/wobauth/application_helper.rb +53 -0
- data/app/helpers/wobauth/authorities_helper.rb +9 -0
- data/app/models/wobauth/ad_user.rb +4 -0
- data/app/models/wobauth/admin_ability.rb +67 -0
- data/app/models/wobauth/authority.rb +17 -0
- data/app/models/wobauth/group.rb +18 -0
- data/app/models/wobauth/membership.rb +11 -0
- data/app/models/wobauth/role.rb +19 -0
- data/app/models/wobauth/user.rb +11 -0
- data/app/services/wobauth/search_ad_user_service.rb +53 -0
- data/app/views/devise/registrations/edit.html.erb +25 -0
- data/app/views/devise/sessions/new.html.erb +17 -0
- data/app/views/devise/shared/_links.html.erb +0 -0
- data/app/views/wobauth/ad_users/index.html.erb +69 -0
- data/app/views/wobauth/authorities/_form.html.erb +32 -0
- data/app/views/wobauth/authorities/edit.html.erb +1 -0
- data/app/views/wobauth/authorities/index.html.erb +41 -0
- data/app/views/wobauth/authorities/new.html.erb +1 -0
- data/app/views/wobauth/authorities/show.html.erb +45 -0
- data/app/views/wobauth/groups/_form.html.erb +20 -0
- data/app/views/wobauth/groups/_group_memberships.html.erb +21 -0
- data/app/views/wobauth/groups/_group_roles.html.erb +23 -0
- data/app/views/wobauth/groups/edit.html.erb +1 -0
- data/app/views/wobauth/groups/index.html.erb +31 -0
- data/app/views/wobauth/groups/new.html.erb +1 -0
- data/app/views/wobauth/groups/show.html.erb +45 -0
- data/app/views/wobauth/memberships/_form.html.erb +20 -0
- data/app/views/wobauth/memberships/edit.html.erb +1 -0
- data/app/views/wobauth/memberships/index.html.erb +33 -0
- data/app/views/wobauth/memberships/new.html.erb +1 -0
- data/app/views/wobauth/memberships/show.html.erb +28 -0
- data/app/views/wobauth/roles/_role_authorities.html.erb +21 -0
- data/app/views/wobauth/roles/index.html.erb +26 -0
- data/app/views/wobauth/roles/show.html.erb +18 -0
- data/app/views/wobauth/shared/_accounting.html.erb +25 -0
- data/app/views/wobauth/shared/_admin.html.erb +13 -0
- data/app/views/wobauth/users/_form.html.erb +28 -0
- data/app/views/wobauth/users/_user_groups.html.erb +22 -0
- data/app/views/wobauth/users/_user_roles.html.erb +23 -0
- data/app/views/wobauth/users/edit.html.erb +1 -0
- data/app/views/wobauth/users/index.html.erb +52 -0
- data/app/views/wobauth/users/new.html.erb +1 -0
- data/app/views/wobauth/users/show.html.erb +130 -0
- data/config/initializers/assets.rb +1 -0
- data/config/initializers/devise.rb +260 -0
- data/config/initializers/devise_failure_app.rb +21 -0
- data/config/initializers/simple_form.rb +169 -0
- data/config/initializers/simple_form_bootstrap.rb +154 -0
- data/config/initializers/wobapphelpers.rb +18 -0
- data/config/locales/de.yml +80 -0
- data/config/locales/devise.de.yml +60 -0
- data/config/locales/devise.en.yml +59 -0
- data/config/locales/en.yml +27 -0
- data/config/locales/simple_form.en.yml +31 -0
- data/config/locales/wobapphelpers.de.yml +10 -0
- data/config/locales/wobapphelpers.en.yml +8 -0
- data/config/routes.rb +24 -0
- data/db/migrate/20140501113226_create_wobauth_roles.rb +9 -0
- data/db/migrate/20140501150743_create_wobauth_groups.rb +10 -0
- data/db/migrate/20140504124045_create_wobauth_memberships.rb +11 -0
- data/db/migrate/20140504143328_create_wobauth_authorities.rb +15 -0
- data/db/migrate/20140508120810_devise_create_wobauth_users.rb +55 -0
- data/db/migrate/20171231084355_additional_fields_to_wobauth_user.rb +8 -0
- data/lib/concerns/models/user.rb +44 -0
- data/lib/generators/templates/initializers/wobauth.rb +20 -0
- data/lib/generators/wobauth/install_generator.rb +20 -0
- data/lib/tasks/wobauth_tasks.rake +4 -0
- data/lib/templates/erb/scaffold/_form.html.erb +26 -0
- data/lib/templates/erb/scaffold/edit.html.erb +1 -0
- data/lib/templates/erb/scaffold/index.html.erb +32 -0
- data/lib/templates/erb/scaffold/new.html.erb +1 -0
- data/lib/templates/erb/scaffold/show.html.erb +15 -0
- data/lib/templates/rails/scaffold_controller/controller.rb +66 -0
- data/lib/wobauth/engine.rb +33 -0
- data/lib/wobauth/version.rb +4 -0
- data/lib/wobauth.rb +57 -0
- data/test/dummy/db/test.sqlite3 +0 -0
- data/test/dummy/db/test1.sqlite3 +0 -0
- data/test/dummy/log/test.log +1954 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/-6/-6x3utBDawbjV5d477TJ9PeEoQTk9Yh292Yg_8Ox16U.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/-A/-A9u9WxFQ9YT2TSLvmYJYJf2Kg9JfDoIt6YZQRcwUHE.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/-C/-CJCPQLf_lB4gJr983MP5sZdH3uZuYPIe-xSw4QBln4.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/-K/-K6Cz6iJ4bgvnwN-rMFxBtyYEU6EGdLH9b4N38_GwIs.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/-x/-xwsVQHMHEQFqvVNjKKkEiujw9_CUgnJ2Hmzampfy60.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/2J/2JNdqFTZ9i8DAT1rZCc-Xj70u9zcQtlJoqEK68sRPVM.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/4N/4NSPDtUmuTVU5uLI-eBtnORjzrwVgeLgrgIJh4tjWeQ.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/4u/4uuqiFX5bLo0J5QqMPSZc642NRkdX4l-Vguvyq6Oe3U.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/5O/5Oqd8RObzOeHuHy3NTiGE5p_ZkpftjQQgJgS_3KKdH0.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/6U/6UZEqCkIx3XO_NjOjjWyLET2-dS4Gs_RPAB9NtA99-A.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/76/767sF803BgrHtDgUPUUn-HN41e6fklZIQkVKyKD59P4.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/77/77ZyE9pECDHt-19ik7nBaJXJQT-7V2UDr49kFOIO1DM.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/7n/7nJvPEaj-WV6RCKHc3hpHsAbWek8cidSKvDKLedQpH4.cache +3 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/85/856_llbCcD4ntIG6h4uR2WQY9SrutzA-9K6xT53ZPTY.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/9A/9A6WX6bvqMDoyDrYrGQy2l6nf_JtHoQZsa-pEJ0FgDU.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/BA/BABtX6k2NZISYrxZSviAXC8UIxZfRhEDDbx7dMf_ShQ.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/D4/D4_Vl_wB6Vq8O0LvQ9iHt-YqG_c0fUR4af06OZlk10k.cache +3 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/DX/DXGc2xprS_TuG5PzNCaBHKBMWTlyrZZYA9jlvlcBn3M.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/Ex/ExDgDLUsesHZC1FAxhQLmTyBpg6IW4gVCUB8U8Ov-X4.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/F8/F8M6mPdg93dPiXZzHGo3Y0I42et4yc5Hr-eCfuOUeac.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/Hk/Hkx4xbJvgHfFgfNDKyHxertTGvARWOgVuNuGU-OWPEU.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/Jo/Jom6Wnb-Sd-d3W24hNHS58BHtuw5Dsm7vvWVPtLB0PA.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/K5/K5UnItDV1g9ixIoFloUxCNirxL5UFrOT0jz1vKy5shc.cache +31 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/K6/K6geC8zADOljHu2R2-DHUgVrgGyij9e4dnxgIdEypMU.cache +2 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/KW/KWpcGMHEfc0mpysCx46leXLgyrzubUIXWouB91Ia5Ik.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/LD/LD1fywEt5YfgacZhvpug0VXFakWRb1jidort_y8Fl00.cache +3 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/LT/LTqeGcgCnDytohL1bGvcUZdnrp6gImr9Gzgfj6sYtW4.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/LX/LXirLCvjN2zWwKoda0ZdfOoFufIGRC9bZFKo95Kxs2w.cache +3 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/MH/MH3Sbn3D_A-k2L9Qd_MSjC2d6zv52DnzX3REO1P8n-E.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/Nm/NmUDbY8fbYAMYUH3HOmHzTLkeJaf-49yXUpF5TXGnYM.cache +3 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/O1/O1xVVUGePb-AZZi4nfbefQqZJEuQKvVAnHbbksdys0g.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/Og/Og28UaPh4fHs8CazZFMRRClJKMdtcZ6TLkcrwXO9888.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/Py/Py0iDud1Fnb6eLZHFV1BlJ1PKkeJS5bSVb8DL5Lyoyo.cache +2 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/Qs/QscUYhnZ_Tw9H1UICqO4jqvLwSznyhEMlkTJRFR63Qk.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/Rx/RxBkonRxRoJzfP-2eiuZPIg4Wy1eaNd6MQ6N0QTzLbw.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/S_/S_VAM9XIEPYa1eIrH2MGCvwgC6UuKNU3IsOsXYCbRfE.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/TK/TK13HHucosr5_ne6uScM6nK6naCAYu11S4GxXyvGEA4.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/TP/TPYDffricRYUN-8EoF99EbRAm5m9QVJ4NsV4JQHUaTU.cache +2 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/TQ/TQZclZQajgRAt0UPyDLa5SDHOXXd7nrs_Aw1guZ1EDE.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/U-/U-j-KeDrdeyrmflpuJSSH3aH_tGth_0zwnjl9eaecCU.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/Ui/Ui_ImrdWE848w92udaqCheUJypT-7QIicGTDDcF94ZY.cache +2 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/Vy/VyeoEaFiHk-BFfUz0QQyO1ywWUjhhvXaWjOhrueWuz4.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/WC/WCZBAZL9AYx33c-WzmPLL8ZaSkyPBwQEpJSzDMruSTA.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/XG/XG-1Cxql9XcU0QzVsKfaImD2F-_fbQakmCOO1PZeiO8.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/Y-/Y-mfMOkq6o7o6NIVKY5m1HzoQPj6deRrSVoSnePwWDg.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/Z5/Z56duv_o-wQlnyich8DqrY8VfI5mRampXLuyzcCQSes.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/_X/_XFCt_G6l_CeYOky6Ky04YbAJMGmZ1S55wnsXuzjbFQ.cache +3 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/_c/_cAbQgu5_t6QaopeTV6bHpVH6nABdZSHUD3dtw3TFvI.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/aU/aUB5QePK5Y_57d0ISu6VcHykCHzl47ej-nXJSzHo7mM.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/ao/ao7sMvRzih2MlCNwwQnYbm-FUNM2rl1wlruiVgH8VbE.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/b8/b8sc4SHWqZyiR9LoszM7AwU7Z9RStRdUzs5Cm4b1xi4.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/dG/dGu-1JGz62Geuns1TpCaYbAwvwLKjSjDp_VhKV3nWOw.cache +3 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/dH/dHU4yPNGwU72V1rymqid8RLS4ole8B-9UGSJG-QyDsQ.cache +3 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/ei/eiJS8jxPa_CT4ECt01iVkhPzc9QQShE__hFgFUVMqhc.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/hq/hqAVf5Mc94swL5QKxbwrtNQ1F6-4shrOpiZMk60yjMM.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/hz/hzzNh1KGk98zydo_p20ZW15iDYFoCsUZuYdK99A54Mo.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/ip/ip5FbXNQpdaOzVbU6_r90bYcY8R47qbE2_C79IUdlvQ.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/je/je9xQVOnasRNd1k49Q5KJdmxQscPKO-8qeVDMmmsVrI.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/jt/jtOzRwEskymBEhztMwmAwvXzROImYepCy7Zb25fxexQ.cache +2 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/m3/m3BDc8KCgIUXE0VeZ142byDvlbYuOEBpNW_2ucKyb3M.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/mf/mfkdFcsUrRviUKGZkElnxw6dCyhyArAFbAVNuqQKcsE.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/mx/mxQkXyjT__7etUOHa4WpbGL4YguqInaF8rQXNK4c6JU.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/o4/o4yHfopv-ZxcXaMdi1_2O0CkBEWWQEd0wR0tEwKJ8s8.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/oF/oFjp7US8e9Cu4GOLqlO_vPIaX9jYwqrYbCFq6mgaYWE.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/op/opKuUcXieH4Q4hch708zXOG2Rud2bhIilb38wKiOdjA.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/p4/p4U2tbFHGXaOchAVtbEfIHRvWKO2i-0nsq_4vtGNABU.cache +2 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/s4/s4jckxw_fz9fwDYqkrZPCsD7cCATrXbD5R7ducBhtoU.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/uP/uPXk7u0shmDjGGOhtU06VSo7E81DYc2t9OGhQUvxEA0.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/vS/vSQW3iohJ14LLnwWgoHFeHB-I3yIzLi9tLoZkUaE81M.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/vu/vuRt78a_J3dg7DUMHX1Nx9DYLME15Z1NjQ-4V8BoNCU.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/w6/w6Gz48zxIouRBGOu5VmTHWsL9r0M4LKp124UOJ3mZN0.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/wj/wjsRbpDa20LzSzj66UKcgy3Wif53rLBEoeuyKIKz4pk.cache +3 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/wo/wo1g4ZKtmQmol-3MoVPFApwd5fnGEA23tCRCLuEw3D0.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/xG/xGQ1RojQn3N9C51pkj4Flt274TjVuszRi1Puir0p6dE.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/xN/xNqJDUb7i6VSD0HU-EV3dcNYRoz2d48cGwn1CBqLvVU.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/y1/y1pwuOg2qdJFc_DgDEw6OIyr6GbmGpwV-p7X2sS64sU.cache +0 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/zO/zOWzdA_n0s0vjbJ6IGB8gj1-mbqzbCywIQCMLr71qDE.cache +1 -0
- data/test/dummy/tmp/cache/assets/sprockets/v3.0/zV/zVdKofyDUgEZzwP0GQ8q4RxOoxo-qoGazLMre0zxw9c.cache +0 -0
- data/test/tmp/config/initializers/wobauth.rb +15 -0
- data/test/tmp/config/locales/wobauth.de.yml +42 -0
- data/test/tmp/config/locales/wobauth.en.yml +27 -0
- metadata +636 -0
@@ -0,0 +1,76 @@
|
|
1
|
+
require_dependency "wobauth/application_controller"
|
2
|
+
|
3
|
+
module Wobauth
|
4
|
+
class UsersController < ApplicationController
|
5
|
+
before_action :set_user, only: [:show, :edit, :update, :destroy]
|
6
|
+
before_action :add_breadcrumb_show, only: [:show]
|
7
|
+
|
8
|
+
# GET /users
|
9
|
+
def index
|
10
|
+
@users = User.all
|
11
|
+
respond_with(@users)
|
12
|
+
end
|
13
|
+
|
14
|
+
# GET /users/1
|
15
|
+
def show
|
16
|
+
respond_with(@user)
|
17
|
+
end
|
18
|
+
|
19
|
+
# GET /users/new
|
20
|
+
def new
|
21
|
+
@user = User.new(new_user_params)
|
22
|
+
respond_with(@user)
|
23
|
+
end
|
24
|
+
|
25
|
+
# GET /users/1/edit
|
26
|
+
def edit
|
27
|
+
end
|
28
|
+
|
29
|
+
# POST /users
|
30
|
+
def create
|
31
|
+
@user = User.new(user_params)
|
32
|
+
|
33
|
+
@user.save
|
34
|
+
respond_with(@user)
|
35
|
+
end
|
36
|
+
|
37
|
+
# PATCH/PUT /users/1
|
38
|
+
def update
|
39
|
+
@user.update(user_params)
|
40
|
+
respond_with(@user)
|
41
|
+
end
|
42
|
+
|
43
|
+
# DELETE /users/1
|
44
|
+
def destroy
|
45
|
+
@user.destroy
|
46
|
+
respond_with(@user)
|
47
|
+
end
|
48
|
+
|
49
|
+
private
|
50
|
+
# Use callbacks to share common setup or constraints between actions.
|
51
|
+
def set_user
|
52
|
+
@user = User.find(params[:id])
|
53
|
+
end
|
54
|
+
|
55
|
+
# Only allow a trusted parameter "white list" through.
|
56
|
+
def user_params
|
57
|
+
if params[:user][:password].blank? && action_name == 'update'
|
58
|
+
params[:user].delete(:password)
|
59
|
+
params[:user].delete(:password_confirmation)
|
60
|
+
end
|
61
|
+
params.require(:user).permit(
|
62
|
+
:username, :gruppen, :sn, :givenname, :displayname,
|
63
|
+
:telephone, :email, :password, :password_confirmation,
|
64
|
+
:title, :position, :department, :company
|
65
|
+
)
|
66
|
+
end
|
67
|
+
|
68
|
+
def new_user_params
|
69
|
+
params.slice(
|
70
|
+
:username, :gruppen, :sn, :givenname, :displayname,
|
71
|
+
:telephone, :email, :password, :password_confirmation,
|
72
|
+
:title, :position, :department, :company
|
73
|
+
).permit!
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
module Wobauth
|
2
|
+
module AdUsersHelper
|
3
|
+
def new_from_aduser_link(model, aduser)
|
4
|
+
return unless (aduser.present? && model.present?)
|
5
|
+
case aduser_class(model, aduser)
|
6
|
+
when "table-danger"
|
7
|
+
if can? :create, model
|
8
|
+
link_to icon_new, new_polymorphic_path([wobauth, model], aduser_attributes(aduser)),
|
9
|
+
class: 'btn btn-danger',
|
10
|
+
data: {
|
11
|
+
confirm: "Der Eintrag enthält keine E-Mail-Adresse. Wenn es einen ähnlichen Eintrag mit gepflegter E-Mail-Adresse gibt, ist dies hier womöglich der falsche Eintrag. Wollen Sie dennoch weitermachen? Sie können die Daten im folgenden Formular noch korrigieren."
|
12
|
+
}
|
13
|
+
end
|
14
|
+
when "table-primary"
|
15
|
+
if can? :create, model
|
16
|
+
link_to icon_new, new_polymorphic_path([wobauth, model], aduser_attributes(aduser)),
|
17
|
+
class: 'btn btn-primary'
|
18
|
+
end
|
19
|
+
when "table-success"
|
20
|
+
show_link([wobauth, model.where(email: aduser.mail).first])
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def aduser_class(model, aduser)
|
25
|
+
return unless (aduser.present? && model.present?)
|
26
|
+
if aduser.mail.blank?
|
27
|
+
"table-danger"
|
28
|
+
elsif model.exists?(email: aduser.mail)
|
29
|
+
"table-success"
|
30
|
+
else
|
31
|
+
"table-primary"
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
def aduser_attributes(aduser)
|
38
|
+
{
|
39
|
+
username: aduser.username,
|
40
|
+
sn: aduser.sn,
|
41
|
+
givenname: aduser.givenname,
|
42
|
+
displayname: aduser.displayname,
|
43
|
+
cn: aduser.cn,
|
44
|
+
dn: aduser.dn,
|
45
|
+
email: aduser.mail,
|
46
|
+
position: aduser.title,
|
47
|
+
telephone: aduser.telephonenumber,
|
48
|
+
telefax: aduser.facsimiletelephonenumber,
|
49
|
+
mobile: aduser.mobile,
|
50
|
+
description: aduser.description,
|
51
|
+
department: aduser.department,
|
52
|
+
company: aduser.company,
|
53
|
+
plz: aduser.postalcode,
|
54
|
+
ort: aduser.l,
|
55
|
+
streetaddress: aduser.streetaddress,
|
56
|
+
}
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
module Wobauth
|
2
|
+
module ApplicationHelper
|
3
|
+
include Wobapphelpers::Helpers::All
|
4
|
+
|
5
|
+
def polymorphic_selector(form, poly, types, group_method = :all)
|
6
|
+
msg = ""
|
7
|
+
# -- object available?
|
8
|
+
if form.object.send(poly).present?
|
9
|
+
msg += poly_type_display(form, poly)
|
10
|
+
msg += poly_id_select(form, poly, form.object.send("#{poly}_type"), :all)
|
11
|
+
else
|
12
|
+
msg += poly_type_select(form, poly, types)
|
13
|
+
msg += poly_id_select(form, poly, types, group_method)
|
14
|
+
end
|
15
|
+
msg.html_safe
|
16
|
+
end
|
17
|
+
|
18
|
+
def navigation_admin_links
|
19
|
+
render partial: 'wobauth/shared/admin'
|
20
|
+
end
|
21
|
+
|
22
|
+
def navigation_account_links
|
23
|
+
render partial: 'wobauth/shared/accounting'
|
24
|
+
end
|
25
|
+
|
26
|
+
def admin_active_class
|
27
|
+
if [:users, :groups, :memberships, :roles, :authorities].include?(controller.controller_name.to_sym)
|
28
|
+
"active"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def poly_type_select(f, poly, types)
|
35
|
+
f.input "#{poly}_type".to_sym, collection: types,
|
36
|
+
label_method: lambda {|x| t('activerecord.models.' + x.underscore)}
|
37
|
+
end
|
38
|
+
|
39
|
+
def poly_type_display(f, poly)
|
40
|
+
f.input("#{poly}_type".to_sym, collection: Array(f.object.send("#{poly}_type")),
|
41
|
+
label_method: lambda {|x| t('activerecord.models.' + x.underscore)},
|
42
|
+
disabled: true) +
|
43
|
+
f.hidden_field("#{poly}_type".to_sym, value: f.object.send("#{poly}_type"))
|
44
|
+
end
|
45
|
+
|
46
|
+
def poly_id_select(f, poly, types, group_method)
|
47
|
+
collections = Array(types).map {|t| t.constantize}
|
48
|
+
f.input "#{poly}_id".to_sym, collection: collections,
|
49
|
+
as: :grouped_select, group_method: group_method
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
module Wobauth
|
2
|
+
# AdminAbility - abilities for wobauth
|
3
|
+
# Mostly you have own abilities for your application.
|
4
|
+
# If you need access to Wobauth models for non admin users,
|
5
|
+
# there are some restrictions: i.e. navigate to Wobauth::User
|
6
|
+
# means AdminAbility is active and your abilities from your application
|
7
|
+
# are not visible. Or you may overwrite the default abilities for 'Admin',
|
8
|
+
# 'OrgaAdmin' or 'UserAdmin'
|
9
|
+
# To resolve this, extend Woauth::AdminAbility
|
10
|
+
# Example:
|
11
|
+
# role 'UserAdmin' should have only read access to all Wobauth models.
|
12
|
+
# Add a new method :user_admin to Wobauth::AdminAbility (separate file
|
13
|
+
# in your application) and define abilities for 'UserAdmin' there:
|
14
|
+
#
|
15
|
+
# --- file your_application/app/models/wobauth_ability.rb
|
16
|
+
# require 'wobauth/admin_ability'
|
17
|
+
# module Wobauth
|
18
|
+
# class AdminAbility
|
19
|
+
# include CanCan::Ability
|
20
|
+
# def user_admin(rights_for)
|
21
|
+
# can :read, [Wobauth::User, Wobauth::Group, ...]
|
22
|
+
# can :whateverelse ....
|
23
|
+
# end
|
24
|
+
# end
|
25
|
+
# end
|
26
|
+
# ---
|
27
|
+
# at least: don't forget to load wobauth_ability.rb
|
28
|
+
|
29
|
+
class AdminAbility
|
30
|
+
include CanCan::Ability
|
31
|
+
|
32
|
+
def initialize(user)
|
33
|
+
@user = user
|
34
|
+
return if @user.nil?
|
35
|
+
authorities = (@user.authorities + @user.group_authorities)
|
36
|
+
add_abilities(authorities)
|
37
|
+
end
|
38
|
+
|
39
|
+
private
|
40
|
+
def add_abilities(authorities)
|
41
|
+
Array(authorities).each do |authority|
|
42
|
+
add_ability(authority)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def add_ability(authority)
|
47
|
+
role = authority.role.name.underscore
|
48
|
+
if respond_to?(role)
|
49
|
+
send(role, authority.authorized_for)
|
50
|
+
else
|
51
|
+
fallback(authority)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def fallback(authority)
|
56
|
+
role = authority.role.to_s
|
57
|
+
if role == 'Admin'
|
58
|
+
can :manage, :all
|
59
|
+
elsif role == 'UserAdmin'
|
60
|
+
can :manage, :all
|
61
|
+
elsif role == 'OrgaAdmin'
|
62
|
+
can :read, :all
|
63
|
+
can :navigate, Wobauth::User
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Wobauth
|
2
|
+
class Authority < ActiveRecord::Base
|
3
|
+
# -- associations
|
4
|
+
belongs_to :authorizable, polymorphic: true
|
5
|
+
belongs_to :role
|
6
|
+
belongs_to :authorized_for, polymorphic: true, optional: true
|
7
|
+
|
8
|
+
# -- configuration
|
9
|
+
# -- validations and callbacks
|
10
|
+
validates :authorizable_id, :authorizable_type,
|
11
|
+
:role_id, presence: true
|
12
|
+
|
13
|
+
scope :valid, ->(date) {
|
14
|
+
where('(valid_until >= ? OR valid_until is NULL) AND (valid_from <= ? OR valid_from is NULL)', date, date)
|
15
|
+
}
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Wobauth
|
2
|
+
class Group < ActiveRecord::Base
|
3
|
+
# -- associations
|
4
|
+
has_many :authorities, as: :authorizable
|
5
|
+
has_many :roles, through: :authorities
|
6
|
+
has_many :memberships
|
7
|
+
has_many :users, -> { uniq }, through: :memberships,
|
8
|
+
source: :user
|
9
|
+
# -- configuration
|
10
|
+
# -- validations and callbacks
|
11
|
+
validates :name, :presence => true, :uniqueness => true
|
12
|
+
|
13
|
+
|
14
|
+
def to_s
|
15
|
+
name
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Wobauth
|
2
|
+
class Role < ActiveRecord::Base
|
3
|
+
# -- associations
|
4
|
+
has_many :authorities
|
5
|
+
has_many :users, through: :authorities,
|
6
|
+
source: :authorizable,
|
7
|
+
source_type: Wobauth::User
|
8
|
+
has_many :groups, through: :authorities,
|
9
|
+
source: :authorizable,
|
10
|
+
source_type: Wobauth::Group
|
11
|
+
# -- configuration
|
12
|
+
# -- validations and callbacks
|
13
|
+
validates :name, :presence => true, :uniqueness => true
|
14
|
+
|
15
|
+
def to_s
|
16
|
+
name
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
module Wobauth
|
2
|
+
class User < ActiveRecord::Base
|
3
|
+
# dependencies within wobauth models
|
4
|
+
include Wobauth::Concerns::Models::User
|
5
|
+
|
6
|
+
# Include default devise modules. Others available are:
|
7
|
+
# :confirmable, :lockable, :timeoutable and :omniauthable
|
8
|
+
devise :database_authenticatable, :registerable,
|
9
|
+
:recoverable, :rememberable, :trackable
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
module Wobauth
|
2
|
+
class SearchAdUserService
|
3
|
+
Result = ImmutableStruct.new( :success?, :error_messages, :ad_users )
|
4
|
+
|
5
|
+
def initialize(options = {})
|
6
|
+
@options = options.symbolize_keys
|
7
|
+
@ldap_options = options.fetch(:ldap_options, Wobauth.ldap_options)
|
8
|
+
if @ldap_options.blank?
|
9
|
+
raise RuntimeError, "ldap_options not set!"
|
10
|
+
end
|
11
|
+
@query = options.fetch(:query, false)
|
12
|
+
end
|
13
|
+
|
14
|
+
def call
|
15
|
+
unless query
|
16
|
+
return Result.new(success: false, error_messages: ["no query given"], ad_users: [])
|
17
|
+
end
|
18
|
+
|
19
|
+
ldap = Wobaduser::LDAP.new(ldap_options: ldap_options)
|
20
|
+
if ldap.errors.any?
|
21
|
+
return Result.new(success: false, error_messages: ldap.errors, ad_users: [])
|
22
|
+
end
|
23
|
+
|
24
|
+
search = Wobaduser::User.search(ldap: ldap, filter: user_filter(query))
|
25
|
+
if search.success?
|
26
|
+
result = Result.new(success: true, error_messages: [], ad_users: search.entries)
|
27
|
+
else
|
28
|
+
result = Result.new(success: false, error_messages: search.errors, ad_users: [])
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
attr_reader :query, :ldap_options
|
34
|
+
|
35
|
+
# use filter in Wobaduser::User.search
|
36
|
+
# objectclass=user will be implicit added via Wobaduser::User.filter
|
37
|
+
def user_filter(query)
|
38
|
+
filter = "(&"
|
39
|
+
filter += "(|(sn=#{query}*)(givenName=#{query}*)(mail=#{query}*))"
|
40
|
+
filter += "(!(sAMAccountname=admin*))"
|
41
|
+
filter += "(!(sAMAccountname=*test*))"
|
42
|
+
filter += "(!(sn=*test*))"
|
43
|
+
filter += "(!(sn=*admin*))"
|
44
|
+
filter += "(!(givenName=*admin*))"
|
45
|
+
filter += "(UserAccountControl:1.2.840.113556.1.4.803:=512)"
|
46
|
+
filter += "(!(UserAccountControl:1.2.840.113556.1.4.803:=2))"
|
47
|
+
filter += "(!(primaryGroupID=512))"
|
48
|
+
filter += "(!(msExchHideFromAddressLists=TRUE))"
|
49
|
+
filter += ")"
|
50
|
+
filter = Net::LDAP::Filter.construct(filter)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
<div class="container">
|
2
|
+
<%= simple_form_for(resource, as: resource_name, url: registration_path(resource_name), html: { method: :put, class: 'card' }) do |f| %>
|
3
|
+
<%= f.error_notification %>
|
4
|
+
|
5
|
+
<div class="card-header">
|
6
|
+
<%= form_legend %>
|
7
|
+
</div>
|
8
|
+
|
9
|
+
<div class="card-body">
|
10
|
+
|
11
|
+
<%= f.input :email, required: true, autofocus: true %>
|
12
|
+
|
13
|
+
<% if devise_mapping.confirmable? && resource.pending_reconfirmation? %>
|
14
|
+
<p>Currently waiting confirmation for: <%= resource.unconfirmed_email %></p>
|
15
|
+
<% end %>
|
16
|
+
|
17
|
+
<%= f.input :password, autocomplete: "off", hint: "leave it blank if you don't want to change it", required: false %>
|
18
|
+
<%= f.input :password_confirmation, required: false %>
|
19
|
+
<%= f.input :current_password, hint: "we need your current password to confirm your changes", required: true %>
|
20
|
+
|
21
|
+
<%= f.button :submit, class: 'btn btn-primary' %>
|
22
|
+
<%= cancel_button %>
|
23
|
+
</div>
|
24
|
+
<% end %>
|
25
|
+
</div>
|
@@ -0,0 +1,17 @@
|
|
1
|
+
<div class="container">
|
2
|
+
<%= simple_form_for(resource, as: resource_name, url: session_path(resource_name),
|
3
|
+
html: { class: 'card'}) do |f| %>
|
4
|
+
<div class="card-header">
|
5
|
+
<h3>Login</h3>
|
6
|
+
</div>
|
7
|
+
|
8
|
+
<div class="card-body">
|
9
|
+
<%= f.input :username, required: true, autofocus: true %>
|
10
|
+
<%= f.input :password, required: true %>
|
11
|
+
|
12
|
+
<%= f.button :submit, "Log in" %>
|
13
|
+
</div>
|
14
|
+
<% end %>
|
15
|
+
|
16
|
+
<%= render "devise/shared/links" %>
|
17
|
+
</div>
|
File without changes
|
@@ -0,0 +1,69 @@
|
|
1
|
+
<div class="card col-sm-4 bg-light">
|
2
|
+
<div class="card-body p-1 m-1">
|
3
|
+
<%= form_tag( url_for(:action => 'index'),
|
4
|
+
:class => "") do -%>
|
5
|
+
<div class="form-group">
|
6
|
+
<label>Name, Vorname oder E-Mail-Adresse:</label>
|
7
|
+
<%= text_field_tag :query, '', class: 'form-control'-%>
|
8
|
+
</div>
|
9
|
+
<% end -%>
|
10
|
+
</div>
|
11
|
+
</div>
|
12
|
+
<br>
|
13
|
+
|
14
|
+
<table id="adusers" class="table table-bordered table-striped dataTable" role="datatable">
|
15
|
+
<thead>
|
16
|
+
<tr>
|
17
|
+
<th><%= t('attributes.sn') %></th>
|
18
|
+
<th><%= t('attributes.givenname') %></th>
|
19
|
+
<th><%= t('attributes.ort') %></th>
|
20
|
+
<th><%= t('attributes.plz') %></th>
|
21
|
+
<th><%= t('attributes.streetaddress') %></th>
|
22
|
+
<th><%= t('attributes.department') %></th>
|
23
|
+
<th><%= t('attributes.company') %></th>
|
24
|
+
<th><%= t('attributes.mail') %></th>
|
25
|
+
<th><%= t('attributes.telephonenumber') %></th>
|
26
|
+
<th><%= t('attributes.facsimiletelephonenumber') %></th>
|
27
|
+
<th><%= t('attributes.mobile') %></th>
|
28
|
+
<th><%= t('attributes.username') %></th>
|
29
|
+
<th><%= t('wobauth.action') %></th>
|
30
|
+
</tr>
|
31
|
+
</thead>
|
32
|
+
<tfoot>
|
33
|
+
<tr>
|
34
|
+
<th></th>
|
35
|
+
<th></th>
|
36
|
+
<th></th>
|
37
|
+
<th></th>
|
38
|
+
<th></th>
|
39
|
+
<th></th>
|
40
|
+
<th></th>
|
41
|
+
<th></th>
|
42
|
+
<th></th>
|
43
|
+
<th></th>
|
44
|
+
<th></th>
|
45
|
+
<th></th>
|
46
|
+
<th></th>
|
47
|
+
</tr>
|
48
|
+
</tfoot>
|
49
|
+
|
50
|
+
<tbody>
|
51
|
+
<% @ad_users.each do |ad_user| %>
|
52
|
+
<%= content_tag(:tr, class: aduser_class(Wobauth::User, ad_user)) do %>
|
53
|
+
<td><%= ad_user.sn %></td>
|
54
|
+
<td><%= ad_user.givenname %></td>
|
55
|
+
<td><%= ad_user.l %></td>
|
56
|
+
<td><%= ad_user.postalcode %></td>
|
57
|
+
<td><%= ad_user.streetaddress %></td>
|
58
|
+
<td><%= ad_user.department %></td>
|
59
|
+
<td><%= ad_user.company %></td>
|
60
|
+
<td><%= ad_user.mail %></td>
|
61
|
+
<td><%= ad_user.telephonenumber %></td>
|
62
|
+
<td><%= ad_user.facsimiletelephonenumber %></td>
|
63
|
+
<td><%= ad_user.mobile %></td>
|
64
|
+
<td><%= ad_user.username %></td>
|
65
|
+
<td><%= new_from_aduser_link(Wobauth::User, ad_user) %></td>
|
66
|
+
<% end %>
|
67
|
+
<% end %>
|
68
|
+
</tbody>
|
69
|
+
</table>
|
@@ -0,0 +1,32 @@
|
|
1
|
+
<div class="container">
|
2
|
+
<%= simple_form_for([wobauth, @authorizable, @authority],
|
3
|
+
html: { class: 'form-horizontal card' }
|
4
|
+
) do |f| %>
|
5
|
+
|
6
|
+
<div class="card-header">
|
7
|
+
<%= form_legend %>
|
8
|
+
</div>
|
9
|
+
|
10
|
+
<div class="card-body">
|
11
|
+
<%= polymorphic_selector(f,
|
12
|
+
'authorizable',
|
13
|
+
Wobauth.authorizable_types,
|
14
|
+
Wobauth.authorizable_group_method) %>
|
15
|
+
<%= f.association :role %>
|
16
|
+
<%= polymorphic_selector(f,
|
17
|
+
'authorized_for',
|
18
|
+
Wobauth.authorized_for_types,
|
19
|
+
Wobauth.authorized_for_group_method) %>
|
20
|
+
|
21
|
+
<%= f.input :valid_from, as: :string, class: 'datepicker'
|
22
|
+
%>
|
23
|
+
<%= f.input :valid_until, as: :string, class: 'datepicker'
|
24
|
+
%>
|
25
|
+
|
26
|
+
<%= f.button :submit, class: 'btn btn-primary' %>
|
27
|
+
<%= cancel_button %>
|
28
|
+
</div>
|
29
|
+
<% end %>
|
30
|
+
</div>
|
31
|
+
|
32
|
+
<%= javascript_include_tag "wobauth/authorities" %>
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= render 'form' %>
|
@@ -0,0 +1,41 @@
|
|
1
|
+
<h1><%= t('controller.wobauth/authorities') %></h1>
|
2
|
+
|
3
|
+
<%= content_tag :table, id: :wobauth_authorities, role: :wobauth_datatable,
|
4
|
+
class: "table table-bordered table-striped dataTable" do %>
|
5
|
+
<thead>
|
6
|
+
<tr>
|
7
|
+
<th><%= t('attributes.authorizable') %></th>
|
8
|
+
<th><%= t('attributes.authorizable_type') %></th>
|
9
|
+
<th><%= t('attributes.role') %></th>
|
10
|
+
<th><%= t('attributes.authorized_for') %></th>
|
11
|
+
<th><%= t('attributes.authorized_for_type') %></th>
|
12
|
+
<th><%= t('attributes.valid_from') %></th>
|
13
|
+
<th><%= t('attributes.valid_until') %></th>
|
14
|
+
<th><%= t('wobauth.action') %></th>
|
15
|
+
</tr>
|
16
|
+
</thead>
|
17
|
+
<tbody>
|
18
|
+
|
19
|
+
<% @authorities.each do |authority| %>
|
20
|
+
<%= content_tag_for(:tr, authority) do %>
|
21
|
+
<td><%= authority.authorizable %></td>
|
22
|
+
<td><%= authority.authorizable_type %></td>
|
23
|
+
<td><%= authority.role %></td>
|
24
|
+
<td><%= authority.authorized_for %></td>
|
25
|
+
<td><%= authority.authorized_for_type %></td>
|
26
|
+
<td><%= authority.valid_from %></td>
|
27
|
+
<td><%= authority.valid_until %></td>
|
28
|
+
<td class="nowrap">
|
29
|
+
<%= show_link [wobauth, authority] %>
|
30
|
+
<%= edit_link [wobauth, authority] %>
|
31
|
+
<%= delete_link [wobauth, authority] %>
|
32
|
+
</td>
|
33
|
+
<% end %>
|
34
|
+
<% end %>
|
35
|
+
</tbody>
|
36
|
+
<% end %>
|
37
|
+
|
38
|
+
<br />
|
39
|
+
|
40
|
+
<%= back_link %>
|
41
|
+
<%= new_link [wobauth, Wobauth::Authority] %>
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= render 'form' %>
|
@@ -0,0 +1,45 @@
|
|
1
|
+
<div class="card">
|
2
|
+
<div class="card-header">
|
3
|
+
<h4><%= t('activerecord.models.wobauth/authority') %></h4>
|
4
|
+
</div>
|
5
|
+
<div class="card-body">
|
6
|
+
<table class="table table-bordered table-hover autowidth">
|
7
|
+
<tr>
|
8
|
+
<th><%= t('attributes.authorizable')%>:</th>
|
9
|
+
<td><%= @authority.authorizable %></td>
|
10
|
+
</tr>
|
11
|
+
<tr>
|
12
|
+
<th><%= t('attributes.authorizable_type')%>:</th>
|
13
|
+
<td><%= @authority.authorizable_type %></td>
|
14
|
+
</tr>
|
15
|
+
<tr>
|
16
|
+
<th><%= t('attributes.role')%>:</th>
|
17
|
+
<td><%= @authority.role %></td>
|
18
|
+
</tr>
|
19
|
+
<tr>
|
20
|
+
<th><%= t('attributes.authorized_for')%>:</th>
|
21
|
+
<td><%= @authority.authorized_for %></td>
|
22
|
+
</tr>
|
23
|
+
<tr>
|
24
|
+
<th><%= t('attributes.authorized_for_type')%>:</th>
|
25
|
+
<td><%= @authority.authorized_for_type %></td>
|
26
|
+
</tr>
|
27
|
+
<tr>
|
28
|
+
<th><%= t('attributes.valid_from')%>:</th>
|
29
|
+
<td><%= @authority.valid_from %></td>
|
30
|
+
</tr>
|
31
|
+
<tr>
|
32
|
+
<th><%= t('attributes.valid_until')%>:</th>
|
33
|
+
<td><%= @authority.valid_until %></td>
|
34
|
+
</tr>
|
35
|
+
</table>
|
36
|
+
<div role="toolbar">
|
37
|
+
<%= back_link %>
|
38
|
+
<%= edit_link([wobauth, @authority]) %>
|
39
|
+
<%= delete_link([wobauth, @authority]) %>
|
40
|
+
<%= new_link [wobauth, Wobauth::Authority] %>
|
41
|
+
</div>
|
42
|
+
</div>
|
43
|
+
</div>
|
44
|
+
|
45
|
+
|