مرجع تخصصی برنامه نویسان

انجمن تخصصی برنامه نویسان فارسی زبان

کاربر سایت

ofoghcomputer

عضویت از 1393/07/15

کار نکردن authorized

  • یکشنبه 5 اردیبهشت 1395
  • 05:49
تشکر میکنم

با سلام.

من یک CustonRoleProvider با کدهای زیر ساختم:

using System;
using System.Collections.Generic;
using System.Configuration.Provider;
using System.Linq;
using System.Web;
using System.Web.Security;
using Talash.Models;
namespace Talash
{
    public class CustomRoleProvider : RoleProvider
    {
        talasheduEntities talash = new talasheduEntities();
        public override string ApplicationName
        {
            get
            {
                throw new NotImplementedException();
            }

            set
            {
                throw new NotImplementedException();
            }
        }
  public override void CreateRole(string roleName)
        {
            if (RoleExists(roleName))
            {
                throw new ProviderException("Role name already exists.");
            }
            else
            {
                Tbl_Role r = new Tbl_Role();
                r.RoleName = roleName;
                talash.Tbl_Role.Add(r);
                talash.SaveChanges();
            }//throw new NotImplementedException();
        }

        public override bool DeleteRole(string roleName, bool throwOnPopulatedRole)
        {
            Tbl_Role r = talash.Tbl_Role.First(i=>i.RoleName==roleName);
            talash.Tbl_Role.Remove(r);

            throw new NotImplementedException();
        }

 public override string[] GetRolesForUser(string username)
        {
            string[] f = {""};
            var d = (from u in talash.Tbl_User
                     join k in talash.Tbl_RoleInUser on u.UserID equals k.UserID
                     join r in talash.Tbl_Role on k.RoleID equals r.RoleID
                     select new { r.RoleName });
            for (int i = 0; i < d.Count(); i++)
            {
                f[i] = d.ToArray()[i].RoleName;
            }
            return f;
        }
 public override bool RoleExists(string roleName)
        {
            bool exists = false;
            var role = from r in talash.Tbl_Role where r.RoleName == roleName select r.RoleID;
            if (role.Count()>0)
            {
                exists = true;
            }
            return exists;
           
        }

در وب کانفیگ نیز کدهای زیر را گذاشته ام:

<authentication mode="Forms">
      <forms loginUrl="~/Login/Login" timeout="2880" />
    </authentication>
    <roleManager  defaultProvider="CustomRoleProvider" enabled="true">
      <providers>
        <clear/>
        <add  name="CustomRoleProvider" type="Talash.CustomRoleProvider"
       connectionStringName="talasheduEntities"
       enablePasswordRetrieval="false" enablePasswordReset="true"
       requiresQuestionAndAnswer="false" writeExceptionsToEventLog="false"
         />
      </providers>
    </roleManager>

سپس برای صفحه Admin کد زیر را گذاشته ام:

[Authorize(Roles = "SiteManager")]

اما پس از لاگین کردن شخصی با این نقش ، به صفحه ای که درauthentication تعریف شده است می روم.

فکر می کنم خاصیتAuthorize کار نمی کند..

لطفا راهنمایی نمایید

پاسخ های این پرسش

تعداد پاسخ ها : 7 پاسخ
کاربر سایت

ایمان مدائنی

عضویت از 1392/01/20

  • یکشنبه 5 اردیبهشت 1395
  • 08:56

کد ها به نظر مشکلی ندارند

باید چک کنید ببینید اصلا وارد کلاستون میشه و اگر میشه آیا نقش کاربر را درست برمیگردونه

کاربر سایت

ofoghcomputer

عضویت از 1393/07/15

  • یکشنبه 5 اردیبهشت 1395
  • 10:04

کد زیر را در کلاس Custom provider نوشتم:

 public override string[] GetRolesForUser(string username)
        {
            string[] f = {""};
            var d = (from u in talash.Tbl_User
                     join k in talash.Tbl_RoleInUser on u.UserID equals k.UserID
                     join r in talash.Tbl_Role on k.RoleID equals r.RoleID
                     select new { r.RoleName });
            for (int i = 0; i < d.Count(); i++)
            {
                f[i] = d.ToArray()[i].RoleName;
            }
            return f;
        }

وارد این متد می شود و متغیر f برابر Sitemanager می شود.

اما پس از اجرای این متد برنامه به کنترلر Login که در قسمت Authenticate مربوط به وب کانفیگ تعریف شده است می پرد.

اطفا راهنمایی نمایید

با تشکر

کاربر سایت

ایمان مدائنی

عضویت از 1392/01/20

  • یکشنبه 5 اردیبهشت 1395
  • 10:06

به حروف کوچک و بزرگ حساس است

آیا این مورد رو رعایت کردید ؟

کاربر سایت

ofoghcomputer

عضویت از 1393/07/15

  • یکشنبه 5 اردیبهشت 1395
  • 10:12

من بجای username ، کد ملی رو پاس می دم. اسم متغیر فقط username هست

کاربر سایت

ofoghcomputer

عضویت از 1393/07/15

  • یکشنبه 5 اردیبهشت 1395
  • 11:12

جناب مدائنی بنظرتون مشکل کجا است؟

کاربر سایت

ایمان مدائنی

عضویت از 1392/01/20

  • یکشنبه 5 اردیبهشت 1395
  • 11:19

والا نمیدونم

به نظر همه چی درست میاد

باید کدتون تریس بشه تا مشکل پیدا بشه

باید مراحل رو تک تک بررسی کنید تا متوجه کدام مرحله خطا داره

اگر از Unit Test استفاده کنید این مشکلات پیش نمیاد

کاربر سایت

ofoghcomputer

عضویت از 1393/07/15

  • یکشنبه 5 اردیبهشت 1395
  • 11:22

اینها رو که نوشتم همش با استفاده از تریس کردن بود.

نمی دانم چرا همش به صفحه لاگین پرش می کند.

لطفاً منبع خوبی در مورد unit test معرفی نمایید

با تشکر

کاربرانی که از این پست تشکر کرده اند

هیچ کاربری تا کنون از این پست تشکر نکرده است

اگر نیاز به یک مشاور در زمینه طراحی سایت ، برنامه نویسی و بازاریابی الکترونیکی دارید

با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)