دسته بندی ها
17:10 1399/11/05

استفاده از دستور User.IsInRole جهت کنترل دسترسی کاربر در ویو در Asp.net Core

مشخصات سوال کننده :
کاربر : abbas     امتیاز کاربر : ‎−1     رتبه کاربر : 7121
دسته بندی : Asp.net Core

به این سوال امتیاز بدهید    ‎−1
تعداد بازدید این سوال : 2695
1 نظر
fateme : شما توی جدول AspNetRoles دقیقا نقشی به نام creatcategory دارید؟ و نکته دوم اینکه کاربری که به سیستم لاگین کرده توی جدول AspNetUserRole این نقش رو داره ؟

امتیاز کاربر : 1635   رتبه کاربر : 2   تاریخ ثبت : 11:07 1399/11/06
هوش مصنوعی

پاسخ هوش مصنوعی

برای استفاده از دستور `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` باشد، دکمه "افزودن دسته بندی جدید" نمایش داده می شود و در غیر این صورت مخفی خواهد بود.

به این پاسخ امتیاز بدهید    0
امتیاز: - رتبه: -
پاسخ دهنده : fateme 18:58 1399/11/06

منظور شما از اینکه میفرمایید این دستور کار نمیکنه چی هست دقیقا؟ فرض کنید کاربری دارید که بعد از لاگین به سیستم میخواید فقط در صورتی منو یا دکمه ای رو ببینه که دسترسی رو داشته باشه در غیر این صورت اون منو یا دکمه غیر فعال باشه. خب در این صورت می تونید از دستور User.IsInRole استفاده کنید.

دقت کنید که :

  • در جدول AspNetRoles حتما یک دسترسی به نام creatcategory تعریف شده باشه.
  • کاربری که باهاش لاگین کردید حتما در جدول AspNetUserRoles دسترسی رو داشته باشه. (کاربرانی که دسترسی رو ندارن بعد از لاگین نمی تونن منو یا دکمه رو ببینن)
  • و نکته بسیار مهم اینکه حتما بعد از اینکه دسترسی رو به کاربر دادید، یا دسترسی رو تعریف کردید یک بار Logout کنید و مجددا Login کنید تا دسترسیها به درستی اعمال بشه. (احتمالا اشکال شما از همینجاست)

 

@if (User.IsInRole("RoleName"))
{
   //اگر کاربری دسترسی داشته باشد تگهای این بخش را می بینید
   //و اگر دسترسی نداشته باشد تگ های این بخش را نمی بیند.
}

 

اگر مشکل شما حل نشد لینک زیر رو ببینید چند تا راهکار دیگه هم داده.

User.IsInRole doesn't work

ویرایش شده در دوشنبه 6 بهمن 1399 ساعت 18:59:04
به این پاسخ امتیاز بدهید    0
امتیاز: 1635 رتبه: 2
برای ارسال پاسخ لطفا وارد حساب کاربری خود شوید.   ورود