باسلام
شبه کد مربوط به ایجاد کاربر 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 - مقدار سطح دسترسی در دیتابیس ذخیره نمیشه، علتش چیه ؟
باتشکر
سلام
1- چون از طرف مدیر انجام میشه مشکل خاص امنیتی نداره بخاطر اینکه این روت تنها توسط کسی باید قابل دسترس باشه که اجازه ایجاد یا ویرایش کاربرها رو داشته باشه .
2- با جاوااسکریپت و درخواست ajax میتونید اینکارو انجام بدید خیلی راحت روی checkbox یک lisenter قرار میدید هر وقت تغییر کرد میفرستید به سرور
3- سطح دسترسی منظور level مربوط به admin یا user ? یا اجازه دسترسی ؟
اگر مربوط به admin و user هست شما باید چک کنید که آیا fillable قرار دادید یا نه یا اصلا این مقدار دهی شده یا نه
و بهتره که سطح دسترسی یعنی user و admin رو در حال ایجاد مقدار دهی نکنید و فقط بصورت default مشخص کنید اگر وارد نشد باید user قرار بگیره بعدا تو ویرایش تغییر بدید
ممنونم از پاسختون، مشکلم حل شد.
در دوره ساخت فروشگاه با لاراول، تا اپیزود 12 بطور کامل مشاهده کردم و طبق مراحل پیش رفتم.
مثلا فرض کنید یه گروه کاربری با عنوان پشتیبانی و با محدودیت های خاص ایجاد کردم.
1 - مشکلی که دارم و در این آموزش جایی ندیدم و یا یاد نگرفتم این هست که، چطوری میتونم مثلا یوزر جدیدی رو که ساختم و گروه کاربریش رو روی پشتیبانی ست کردم، بطور خودکار اون محدودیت های لازم بر روی اون کاربر (کاربران) ست بشه ؟ و بصورت دستی و با میدلورها و ... ست نکنم، شاید مثلا 100 تا پرمیژن داشته باشم، نمیشه که 100 تا دونه دونه ست کرد.
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
myelement.addEventListener('change' , (event) => {
// ajax request
})
خوب از همون Sentry میتونید استفاده کنید
چون از طریق بخش مدیریت هست مشکل خاص امنیتی نداره
فقط اگر از ذخیره سازی با $request->all() هم استفاده نکنید و یکی یکی خودتون مقادیر رو قرار بدید امنیت بالاتر میره
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟