آفلاین
user-avatar

راهنمایی در خصوص ایجاد کاربر در پنل مدیریت

2 سال پیش
توسط mz.dhosseini@gmail.com آپدیت شد
آفلاین
user-avatar
محمد نمازی ( 14721 تجربه )
2 سال پیش
تخصص : توسعه دهنده وب

باسلام

شبه کد مربوط به ایجاد کاربر user . یا admin باتوجه به دوره آموزش فروشگاه لاراول، به این صورت نوشتم :

public function store(Request $request)
    {
        $this->validate($request, [
            'name' => 'required',
            'email' => 'required|email|unique:users,email',
            'password' => 'required|same:confirm-password',
            'level' => 'required',
            'role_id' => 'required'
        ]);
        $input = $request->all();
        $input['password'] = Hash::make($input['password']);
        $user = User::create($input);
        $user->roles()->attach($request->input('role_id'));

        alert()->success('کاربر جدید با موفقیت ایجاد شد', 'باتشکر')->persistent('بسیار خوب');
        return redirect(route('users.index'))->with('status', 'کاربر جدید با موفقیت ایجاد شد .');
    }

کد ویو :

<form class="form-horizontal" action="{{ route('users.store') }}" method="post"
                          enctype="multipart/form-data">
                        {{ csrf_field() }}
                        @include('admin.section.errors')
                        @include('sweet::alert')
                        <div class="portlet-body form">
                            <form role="form" class="form-horizontal">
                                <div class="form-body">
                                    <div class="form-group has-success">
                                        <label class="col-md-2 control-label" for="title">نام کاربر</label>
                                        <div class="col-md-10">
                                            <input type="text" class="form-control" name="name" id="name" placeholder=""
                                                   value="{{ old('name') }}">
                                            <div class="form-control-focus"></div>
                                        </div>
                                    </div>

                                    <div class="form-group has-success">
                                        <label class="col-md-2 control-label" for="email">ایمیل</label>
                                        <div class="col-md-10">
                                            <input type="text" class="form-control" name="email" id="email"
                                                   placeholder="" value="{{ old('email') }}">
                                            <div class="form-control-focus"></div>
                                        </div>
                                    </div>

                                    <div class="form-group has-success">
                                        <label class="col-md-2 control-label" for="password">رمز عبور</label>
                                        <div class="col-md-10">
                                            <input type="password" class="form-control" name="password" id="password"
                                                   placeholder="" value="{{ old('password') }}">
                                            <div class="form-control-focus"></div>
                                        </div>
                                    </div>

                                    <div class="form-group has-success">
                                        <label class="col-md-2 control-label" for="password">تکرار رمز عبور</label>
                                        <div class="col-md-10">
                                            <input type="password" class="form-control" name="confirm-password"
                                                   id="confirm-password" placeholder=""
                                                   value="{{ old('password_confirmation') }}">
                                            <div class="form-control-focus"></div>
                                        </div>
                                    </div>

                                    <div class="form-group  has-success">
                                        <label class="col-md-2 control-label" for="level">سطح دسترسی</label>
                                        <div class="col-md-10">
                                            <select name="level" class="form-control" id="level">
                                                <option value="user">کاربر</option>
                                                <option value="admin">مدیر</option>
                                            </select>
                                            <div class="form-control-focus"></div>
                                        </div>
                                    </div>

                                    <div class="form-group has-success">
                                        <label class="col-md-2 control-label" for="active">فعالسازی</label>
                                        <div class="col-md-10">
                                            <input type="checkbox" id="active" name="active" class="make-switch"
                                                   data-on-text="بله" data-off-text="خیر" data-size="small">
                                        </div>
                                    </div>

                                    <div class="form-group has-success">
                                        <label class="col-md-2 control-label" for="role_id">پرمیژن</label>
                                        <div class="col-md-10">
                                            <select name="role_id[]" class="bs-select form-control" multiple>
                                                @foreach(\App\Role::latest()->get() as $role)
                                                    <option value="{{ $role->id }}">{{ $role->name }}
                                                        - {{ $role->label }}</option>
                                                @endforeach
                                            </select>
                                        </div>
                                    </div>
                                </div>

                                <div class="form-actions">
                                    <div class="row">
                                        <div class="col-md-offset-2 col-md-10">
                                            <a href="{{route('users.index')}}" class="btn default">لغو</a>
                                            <button type="submit" class="btn blue">ایجاد کاربر جدید</button>
                                        </div>
                                    </div>
                                </div>
                        </div>
                    </form>

1 - اگر این کد از نظر امنیتی مشکلی داره راهنمایی ام کنید.
2 - در ویو ایجاد کاربر، فیلدی رو بصورت چک باکس برای فعالسازی یوزر قرار دادم، جطوری میتونم مقدار این فیلد رو ذخیره کنم ؟
3 - مقدار سطح دسترسی در دیتابیس ذخیره نمیشه، علتش چیه ؟

باتشکر

بهترین پاسخ انتخاب شده توسط محمد نمازی
آفلاین
user-avatar
حسام موسوی
2 سال پیش

سلام
1- چون از طرف مدیر انجام میشه مشکل خاص امنیتی نداره بخاطر اینکه این روت تنها توسط کسی باید قابل دسترس باشه که اجازه ایجاد یا ویرایش کاربرها رو داشته باشه .
2- با جاوااسکریپت و درخواست ajax میتونید اینکارو انجام بدید خیلی راحت روی checkbox یک lisenter قرار میدید هر وقت تغییر کرد میفرستید به سرور
3- سطح دسترسی منظور level مربوط به admin یا user ? یا اجازه دسترسی ؟
اگر مربوط به admin و user هست شما باید چک کنید که آیا fillable قرار دادید یا نه یا اصلا این مقدار دهی شده یا نه
و بهتره که سطح دسترسی یعنی user و admin رو در حال ایجاد مقدار دهی نکنید و فقط بصورت default مشخص کنید اگر وارد نشد باید user قرار بگیره بعدا تو ویرایش تغییر بدید

آفلاین
user-avatar
حسام موسوی ( 382229 تجربه )
2 سال پیش
تخصص : طراح و برنامه نویس

سلام
1- چون از طرف مدیر انجام میشه مشکل خاص امنیتی نداره بخاطر اینکه این روت تنها توسط کسی باید قابل دسترس باشه که اجازه ایجاد یا ویرایش کاربرها رو داشته باشه .
2- با جاوااسکریپت و درخواست ajax میتونید اینکارو انجام بدید خیلی راحت روی checkbox یک lisenter قرار میدید هر وقت تغییر کرد میفرستید به سرور
3- سطح دسترسی منظور level مربوط به admin یا user ? یا اجازه دسترسی ؟
اگر مربوط به admin و user هست شما باید چک کنید که آیا fillable قرار دادید یا نه یا اصلا این مقدار دهی شده یا نه
و بهتره که سطح دسترسی یعنی user و admin رو در حال ایجاد مقدار دهی نکنید و فقط بصورت default مشخص کنید اگر وارد نشد باید user قرار بگیره بعدا تو ویرایش تغییر بدید

آفلاین
user-avatar
محمد نمازی ( 14721 تجربه )
2 سال پیش
تخصص : توسعه دهنده وب

ممنونم از پاسختون، مشکلم حل شد.

در دوره ساخت فروشگاه با لاراول، تا اپیزود 12 بطور کامل مشاهده کردم و طبق مراحل پیش رفتم.
مثلا فرض کنید یه گروه کاربری با عنوان پشتیبانی و با محدودیت های خاص ایجاد کردم.
1 - مشکلی که دارم و در این آموزش جایی ندیدم و یا یاد نگرفتم این هست که، چطوری میتونم مثلا یوزر جدیدی رو که ساختم و گروه کاربریش رو روی پشتیبانی ست کردم، بطور خودکار اون محدودیت های لازم بر روی اون کاربر (کاربران) ست بشه ؟ و بصورت دستی و با میدلورها و ... ست نکنم، شاید مثلا 100 تا پرمیژن داشته باشم، نمیشه که 100 تا دونه دونه ست کرد.
2 - چطور میشه پرمیژن های ریز تر، مثلا فقط حذف، فقط ویرایش، ... و یا فقط بتونه گزارش بگیره، و یا فقط کاربر بتونه نظر رو تایید کنه. چنین محدودیت هایی رو چطور میشه ساخت ؟

باتشکر

آفلاین
user-avatar
حسام موسوی ( 382229 تجربه )
2 سال پیش
تخصص : طراح و برنامه نویس

از همون روشه شما باید پرومشن ها رو بصورت دستی در قالب کد هاتون استفاده کنید جاهای که میخواید باید استفاده بشه
البته اگر منظورتون این هست

آفلاین
user-avatar
محمد نمازی ( 14721 تجربه )
2 سال پیش
تخصص : توسعه دهنده وب

1 - درخصوص سوال 2 پاسختون رو ارسال کنید.
2 - منظورتون این هست اگر حدودا 100 پرمشن داشتم، باید 100 تارو بصورت دستی در قالب استفاده کنم ؟ یعنی هیچ راه دیگه ای نداره ؟

در نسخه ی 4.2 لاراول که قبلا کار میکردم پکیجی به اسم Sentry بود که فقط با اضافه کردن تکه کد زیر به منوها تمام دسترسی هارو اعمال میکرد.

@if(Sentry::hasAnyAccess(array('dashboard.news.view')))
                <li class="{{ Request::is($cpanel['prefix'].'/news*') ? 'active' : '' }}">
                    <a href="{{route('dashboard.news.index')}}">
                        <i class="fa fa-file-text"></i>
                        <span class="title">
                             اخبار سایت
                        </span>
                        <span class="{{ Request::is($cpanel['prefix'].'/news*') ? 'selected' : 'arrow' }}"></span>
                    </a>
                </li>
            @endif
آفلاین
user-avatar
محمد نمازی ( 14721 تجربه )
2 سال پیش
تخصص : توسعه دهنده وب

لطفا به سوال قبلی، پاسخ بدید ..

آفلاین
user-avatar
حسام موسوی ( 382229 تجربه )
2 سال پیش
تخصص : طراح و برنامه نویس
myelement.addEventListener('change' , (event) => { 
   // ajax request
})

خوب از همون Sentry میتونید استفاده کنید

آفلاین
user-avatar
mz.dhosseini@gmail.com ( 5454 تجربه )
2 سال پیش

چون از طریق بخش مدیریت هست مشکل خاص امنیتی نداره
فقط اگر از ذخیره سازی با $request->all() هم استفاده نکنید و یکی یکی خودتون مقادیر رو قرار بدید امنیت بالاتر میره

برای ارسال پاسخ باید وارد سایت شوید