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

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

لینک کوتاه اشتراک گذاری

0

باسلام

شبه کد مربوط به ایجاد کاربر 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
حسام موسوی
3 سال پیش

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

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

لینک کوتاه اشتراک گذاری

1

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

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

لینک کوتاه اشتراک گذاری

0

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

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

باتشکر

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

لینک کوتاه اشتراک گذاری

0

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

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

لینک کوتاه اشتراک گذاری

0

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
محمد نمازی ( 14737 تجربه )
3 سال پیش
تخصص : توسعه دهنده وب

لینک کوتاه اشتراک گذاری

0

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

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

لینک کوتاه اشتراک گذاری

0
myelement.addEventListener('change' , (event) => { 
   // ajax request
})

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

آفلاین
user-avatar
m.dhosseini ( 12625 تجربه )
3 سال پیش

لینک کوتاه اشتراک گذاری

1

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

برای ارسال پاسخ لازم است، ابتدا وارد سایت شوید.