استفاده از دستور User.IsInRole جهت کنترل دسترسی کاربر در ویو در Asp.net Core
من میخوام در پروژه ام وقتی کاربر مثلاً به ایجاد خبر دسترسی نداشت مخفی شود نمایش ندهد.
کدهای زیر رو در ویو خودم به اسم Index نوشتم و از دستور User.IsInRole هم استفاده کردم ولی این دستور کار نمیکنه. ممنون میشم راهنمایی بفرمایید.
<div class="row center-block box box-success">
<div class="panel panel-primary>
<div class="panel-body">
if (User.IsInRole("creatcategory"))
{
<div>
<a class="btn btn-primary" asp-controller="Category" asp-action="Create">
<i class="glyphicon glyphicon-plus"></i>
افزودن دسته بندی جدید
</a>
</div>
}
</div>
<table class="table table-responsive text-center">
<thead>
<tr>
<td>@Html.DisplayNameFor(model => model.Title)</td>
<td>@Html.DisplayNameFor(model => model.Description)</td>
</tr>
</thead>
<tbody>
@foreach (var item in Model)
{
<tr>
<td>@item.Title</td>
<td>@item.Description</td>
</tr>
}
</tbody>
</table>
</div>
</div>
پاسخ هوش مصنوعی
برای استفاده از دستور `User.IsInRole` در یک ویو ASP.NET Core، باید اطمینان حاصل کنید که کد شما به درستی نوشته شده است. نکته ای که باید به آن توجه کنید این است که شرایط `if` در C# نمی تواند به طور مستقیم در ویوهای Razor استفاده شود. برای این منظور باید از دستور `@` برای ورود به کد C# استفاده کنید.
با توجه به کدی که شما نوشته اید، به این شکل می توانید آن را اصلاح کنید:
<div class="row center-block box box-success">
<div class="panel panel-primary">
<div class="panel-body">
@if (User.IsInRole("creatcategory"))
{
<div>
<a class="btn btn-primary" asp-controller="Category" asp-action="Create">
<i class="glyphicon glyphicon-plus"></i>
افزودن دسته بندی جدید
</a>
</div>
}
</div>
<table class="table table-responsive text-center">
<thead>
<tr>
<td>@Html.DisplayNameFor(model => model.Title)</td>
<td>@Html.DisplayNameFor(model => model.Description)</td>
</tr>
</thead>
<tbody>
@foreach (var item in Model)
{
<tr>
<td>@item.Title</td>
<td>@item.Description</td>
</tr>
}
</tbody>
</table>
</div>
</div>
با اعمال این تغییر، اگر کاربر در نقش `creatcategory` باشد، دکمه "افزودن دسته بندی جدید" نمایش داده می شود و در غیر این صورت مخفی خواهد بود.
منظور شما از اینکه میفرمایید این دستور کار نمیکنه چی هست دقیقا؟ فرض کنید کاربری دارید که بعد از لاگین به سیستم میخواید فقط در صورتی منو یا دکمه ای رو ببینه که دسترسی رو داشته باشه در غیر این صورت اون منو یا دکمه غیر فعال باشه. خب در این صورت می تونید از دستور User.IsInRole استفاده کنید.
دقت کنید که :
- در جدول AspNetRoles حتما یک دسترسی به نام creatcategory تعریف شده باشه.
- کاربری که باهاش لاگین کردید حتما در جدول AspNetUserRoles دسترسی رو داشته باشه. (کاربرانی که دسترسی رو ندارن بعد از لاگین نمی تونن منو یا دکمه رو ببینن)
- و نکته بسیار مهم اینکه حتما بعد از اینکه دسترسی رو به کاربر دادید، یا دسترسی رو تعریف کردید یک بار Logout کنید و مجددا Login کنید تا دسترسیها به درستی اعمال بشه. (احتمالا اشکال شما از همینجاست)
@if (User.IsInRole("RoleName"))
{
//اگر کاربری دسترسی داشته باشد تگهای این بخش را می بینید
//و اگر دسترسی نداشته باشد تگ های این بخش را نمی بیند.
}
اگر مشکل شما حل نشد لینک زیر رو ببینید چند تا راهکار دیگه هم داده.
- دسترسی به پکیج های nuget در زمان قطع نت بین الملل
- نمایش آخرین ردیف دیتاگیرید موقع لود در wpf
- مشکل اینترنت جهانی و عدم دسترسی به cdnjs.cloudflare.com
- مشکل در نصب sql server 2022
- جلوگیری از اد شدن خودکار در گروه و کانال تلگرام
- کم کردن حجم فیلم توسط کد در Asp net core
- چه کسانی استوری تلگرام را می بینند ؟
- برای کسب و کار تلگرام پرمیوم بهتره یا واتس اپ بیزینس ؟
- جلوگیری از انتشار غیرمجاز مطالب در کانال های تلگرامی
- تفاوت های تلگرام و واتس اپ چیست ؟
- کار با CkEditor با قابلیت آپلود عکس
- خطا در ایجاد migration در Asp.net core
- تفاوت های Asp.net core و Asp.net mvc چیه؟
- دلیل اسپم شدن ایمیل های ارسالی از سرور
- نحوه لایه بندی پروژه Core و اضافه کردن به IIS
- ارسال ایمیل در Asp.net core
- آیا میشه در mvc core از کامپونت استفاده کرد
- آپلود فایل در Asp.net core چگونه است؟
- حذف کامل یک رکورد در جدول ریلیشن شده
- اشکال در آپلود فایل ویدیو در mvc core 2