Laravel 5.4 - filter authenticated users - laravel

I need to filter my navbar upon a column in my users table which is user_type.
user type column has student, Coordinator and admin.
I am able to restrict the buttons of my navbar to only authenticated users using
#if(!Auth::guest())
<li>My projects</li>
#endif
but I am trying to show some buttons only from the Coordinator, how I am able to do that ?

Try this
#if(Auth::check())
#if(Auth::user()->user_type == 'Admin')
<li>Admin Panel</li>
// your logic
#elseif(Auth::user()->user_type == 'Coordinator')
// your logic
#else
// your logic
#endif
#else
// your logic
#endif

Related

Laravel Dynamic Header

I am new in Laravel. I include Header using #include('header'). but I want to hide profile menu when user is not register. How can I do ?
I use this to get data from table directly in blade.php
$array = App\Table::Select(users)->get();
You can use the Auth facade to determine if the current user is logged in:
header.blade.php
#if(Illuminate\Support\Facades\Auth::check())
<!-- profile menu -->
#endif
Edit: You can use blade directives except the #if to checking user is authenticated or not. like the following:
#auth
<!-- Profile Menu -->
#endauth
If you—for whatever reason— just want to know if some user is registered, change your query to the following:
#if(Profile::find($userId) !== null)
<!-- profile menu -->
#endif
You can use auth facade for this.
#auth // The user is authenticated... #endauth
#guest // The user is not authenticated... #endguest
Simple use this
if(Auth::user())
include('header')
endif

Get current logged-in user in Laravel Layout page

I am using laravel auth application in that layout page is present, So to get name of current logged-in user in layout.blade.php I have use {{Auth :: user () -> name}} and it gives name too. But the problem is that when i get logout and try to login then login page gives error Trying to get property 'name' of non-object.
Please help me.
If no user is logged in so Auth::user() will return null,
so in your blade you can use Auth::check() to verify if a user is logged in
#if(Auth::check())
{{ Auth::user()->name }}
#endif
More info can found in
https://laravel.com/docs/7.x/authentication#retrieving-the-authenticated-user
you can use #auth #endauth helper in blade
#auth
{{ Auth::user()->name }}
#endauth
ref link https://laravel.com/docs/8.x/blade#authentication-directives
You will need to check if User is logged in first
try
#if(auth()->check())
{{auth()->user()->name}}
#endif
or in one line
{{auth()->user()->name ?? ''}}

Notification not working on Multiple guards

I have 2 guards. One 'user' and the other 'admin'.
I have stored notification in database as admin. But guard('admin') is not working.
Here is my code in blade file:
<span class="badge badge-light">{{count(auth()->guard('admin')->user()->unreadNotifications())}}</span>
But i am only getting '1' as a result. I have 6 records in my table. Also my forech loop is not working either with guard. Here is the code:
<ul class="dropdown-menu">
#foreach(auth()->guard('admin')->user()->notifications() as $notifications)
<li>{{$notifications->type}}</li>
#endforeach
</ul>
Thanks a bunch
Try using notifications and unreadNotifications without ()
auth()->guard('admin')->user()->notifications
//
auth()->guard('admin')->user()->unreadNotifications
When using () on relationships you are always retrieving a Eloquent or Query Builder instance

Laravel 5 triggering modal in view conditionally

I want to check if user is login, if so then display some content, else i want to click a url or call modal.
#if(Auth::check())
.............if user registered display here
#else
I want to click the link below automatically....OR Call a view
<a class="signin_link" href="{{ action('Auth\AuthController#login') }}" rel="get:Loginform"><i class="fa fa-user" style="font-size:20px"></i></a>
#endif
This will redirect your user to the page you want:
#if(Auth::check())
.............if user registered display here
#else
//Redirect user to the link
<script>window.location = "{{ action('Auth\AuthController#login') }}";</script>
#endif
And this would open your modal, if you are using bootstrap for example:
#if(Auth::check())
.............if user registered display here
#else
//Opening a bootstrap modal
<script>$('#myModal').modal('show')</script>
#endif
Note: I assume that you already have your modal html somewhere on your page
While you can do it in the view, you shouldn't. Instead, use the auth middleware (see https://github.com/laravel/laravel/blob/master/app/Http/Middleware/Authenticate.php).
Here's an example:
Route::group(['middleware' => 'auth'], function() {
Route::get('/this/route/needs/a/logged/in/user', 'PageController#account');
});
If there's no user logged in the visitor is redirected to the login page (which you can set in the middleware).

Laravel Blade check user role

In laravel Blade templating we can exclude some parts of HTML with this code:
#if (Auth::user())
<li>Mein Profil</li>
<li>Admin</li>
#else
<li>Mein Profil</li>
#endif
If user is authenticated then show home and admin links and if user is not authenticated then show only home link.
My question is how to make a check here if user is admin?
I have default login system from laravel and i just added one more column in table users -> ('admin') with tinyint value 1 and in this video
https://www.youtube.com/watch?v=tbNKRr97uVs
i found the code for checking if user is admin
if (!Auth::guest() && Auth::user()->admin )
and it works in AdminMiddleware.php
but it doesn't work in blade. How to make this working??
I find such a long winded, check if logged in, check role, being added all around my blade files to distracting. You may consider adding a custom blade directive. Add something like this to AppServiceProvider boot() function
Blade::if('admin', function () {
return auth()?->user()?->admin === true;
});
in blade just use
#admin
<p>Only admin sees this</p>
#endadmin
#if (!Auth::guest() && Auth::user()->admin)
<li>Mein Profil</li>
<li>Admin</li>
#else
<li>Mein Profil</li>
#endif
this works just to be clear (just add one more column tinyint 'admin' in user table and set to 1)
You can use the method> HasRole
You can call this from artisan tinker from command line, just to see it before writing code:
php artisan tinker
Check if the user with id 1 has role 'user';
User::find(1)->hasRole('user');
Check if the user with id 1 has role 'admin';
User::find(1)->hasRole('admin');
The same way while coding for example in app.blade template:
#if (Auth::user()->hasRole('admin'))
<li>Main Profile</li>
<li>Admin</li>
#else
<li>Main Profile</li>
#endif
The method hasRoles comes from the package spatie/laravel-permission
composer.json:
"spatie/laravel-permission": "^3.16"
full path of the class:
vendor\spatie\laravel-permission\src\Traits\HasRoles.php

Resources