استفاده از دستور 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"))
{
//اگر کاربری دسترسی داشته باشد تگهای این بخش را می بینید
//و اگر دسترسی نداشته باشد تگ های این بخش را نمی بیند.
}
اگر مشکل شما حل نشد لینک زیر رو ببینید چند تا راهکار دیگه هم داده.
- آموزش استفاده از پلاگین گردونه شانس در Asp.net core به همراه سورس
- نمایش متن به صورت فرمت شده در CkEditor
- آموزش استفاده از SignalR در Asp.net Core با مثال عملی
- ادغام چند گزارش استیمول سافت بصورت پی دی اف در یک فایل
- نحوه تغییر استایل کامپوننت select2 چگونه است ؟
- چگونه امنیت پروژه را در Asp.net Core افزایش دهیم ؟
- ارسال پارامتر در دستور window.open جی کویری
- ارسال پارامتر از طریق جاوااسکریپت با کلیک روی تگ a
- خطای 500 زمان اجرا شدن پروژه روی هاست
- کویری نویسی در استیمول سافت جهت فیلتر اطلاعات
- کار با CkEditor با قابلیت آپلود عکس
- خطا در ایجاد migration در Asp.net core
- تفاوت های Asp.net core و Asp.net mvc چیه؟
- دلیل اسپم شدن ایمیل های ارسالی از سرور
- نحوه لایه بندی پروژه Core و اضافه کردن به IIS
- ارسال ایمیل در Asp.net core
- آیا میشه در mvc core از کامپونت استفاده کرد
- آپلود فایل در Asp.net core چگونه است؟
- حذف کامل یک رکورد در جدول ریلیشن شده
- اشکال در آپلود فایل ویدیو در mvc core 2