In meiner Rails-Anwendung habe ich einfach zwei Rollen, Admin und User, die ich in meinem Schema und Benutzermodell definiert habe. Hier ist meine schema.rb mit Benutzer-Tabelle:Rails: Benutzer wird nicht mit der richtigen Standardrolle erstellt
create_table "users", force: :cascade do |t|
t.string "first_name"
t.string "last_name"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.string "email", default: "", null: false
t.string "encrypted_password", default: "", null: false
t.string "reset_password_token"
t.datetime "reset_password_sent_at"
t.datetime "remember_created_at"
t.integer "sign_in_count", default: 0, null: false
t.datetime "current_sign_in_at"
t.datetime "last_sign_in_at"
t.inet "current_sign_in_ip"
t.inet "last_sign_in_ip"
t.integer "role", default: 2
end
add_index "users", ["email"], name: "index_users_on_email", unique: true, using: :btree
add_index "users", ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true, using: :btree
end
Zum einen ist hier mein Benutzermodell:
class User < ActiveRecord::Base
#Defining different roles
enum role: [:Admin, :User]
#Users can only have one scholarship application
has_one :applications
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
end
Meine Fähigkeit Modell:
class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new # guest user (not logged in)
if user.role = 1
can :manage, :all
elsif user.role = 2
can :manage, Application
can :manage, User
else
can :read, Static_Page
end
end
end
Meine Benutzer-Controller:
class UsersController < ApplicationController
before_action :authenticate_user
#Users who are not signed in cannot view users list
before_action :set_user, only: [:show, :edit, :update, :destroy]
load_and_authorize_resource
# GET /users
# GET /users.json
def index
@users = User.all
end
# GET /users/1
# GET /users/1.json
def show
end
# GET /users/new
def new
@user = User.new
end
# GET /users/1/edit
def edit
@user = current_user
end
# POST /users
# POST /users.json
def create
@user = User.new(user_params)
respond_to do |format|
if @user.save
format.html { redirect_to @user, notice: 'User was successfully created.' }
format.json { render :show, status: :created, location: @user }
else
format.html { render :new }
format.json { render json: @user.errors, status: :unprocessable_entity }
end
end
end
# PATCH/PUT /users/1
# PATCH/PUT /users/1.json
def update
respond_to do |format|
if @user.update(user_params)
format.html { redirect_to @user, notice: 'User was successfully updated.' }
format.json { render :show, status: :ok, location: @user }
else
format.html { render :edit }
format.json { render json: @user.errors, status: :unprocessable_entity }
end
end
end
# DELETE /users/1
# DELETE /users/1.json
def destroy
@user.destroy
respond_to do |format|
format.html { redirect_to users_url, notice: 'User was successfully destroyed.' }
format.json { head :no_content }
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_user
@user = User.find(params[:id])
end
#Never trust paramaters from the scary internet, man.
def user_params
params.require(:user).permit(:first_name, :last_name)
end
end
In meinen Ansichten fügte ich etwas co hinzu Bedingungen ausgebracht werden, basierend auf der Rolle des Benutzers gezeigt, wie folgt aus:
<% if user_signed_in? %>
<h4 class="center"> Welcome <%= current_user.first_name %>!</h4>
<% end %>
<% if user_signed_in? && current_user.role = "Admin" %>
<h4 class="center"> You are a <%= current_user.role %>, you can view all applications, edit them, delete users, and more!!</h4>
<% elsif user_signed_in? && current_user.role = "User" %>
<h4 class="center"> Thank you for your interest in our scholarship. As a <%= current_user.role %>, you may create, edit, or delete your scholarship application now that you are signed in.</h4>
<% else %>
<h4 class="center"> Welcome to the Philanthropist's Scholarship Application! Please create an account to apply for our scholarship!</h4>
<% end %>
folgte ich der obigen Logik für einen Admin CP (für Administratoren) und Account-Einstellungen (für Benutzer) Blick in meine Benutzer view-, so dass die Admin-CP würde alle Benutzer wie das Standard-Rails-Gerüst für Benutzer anzeigen, während die Kontoeinstellungen nur die Benutzerinformationen für den aktuellen Benutzer anzeigen würden.
Nur Problem ist, wenn ich einen neuen Benutzer erstellen, sagt es immer, dass der Benutzer ein Administrator ist, ich einen neuen Benutzer erstellen, und der Wert der Rolle scheint nicht gleich 2 (der "Benutzer") und sie sind nur ein Admin und können alles tun.
Irgendwelche Vorschläge?
können Sie eine Hilfsmethode verwenden drucken Admin oder Benutzer anhand von, wenn die current_user.role == 1. Wird der Helfer für Sie zusammengestellt und bearbeiten Sie den Beitrag - Im Moment von dem, was ich sehen kann Sie sind ein <% = current_user.role%>, wird eine Zahl basierend auf ihrer Rolle Nummer – Dave
Hallo Dave, ich danke Ihnen für die Antwort. Ich habe es gestern Abend herausgefunden - mir fehlte noch ein weiterer wichtiger Punkt, ich hatte eine Enum-Rolle: [: Admin,: User], aber dann hatte ich die Rolle im Schema auf 2 gesetzt, aber ich hatte nichts auf zwei gesetzt es wurde 0 indiziert, wie admin = 0 und user ist 1. Also, ich habe es geschafft: Gast,: User,: Admin und setze den Standardwert auf 1. Danke! –
Gern geschehen! froh, dass du es sortiert hast, es ist immer ein böses Gefühl, wenn alles funktioniert! – Dave