ASP.NET MVC نماذج التوثيق والإجراءات تحكم غير مصادق

StackOverflow https://stackoverflow.com/questions/1816625

سؤال

ولدي موقع ASP.NET MVC التي أغلقت باستخدام مصادقة النماذج. في الملف web.config له

<authentication mode="Forms">
    <forms defaultUrl="~/Account/LogOn" loginUrl="~/Account/LogOn" timeout="2880"/>
</authentication>
<authorization>
    <deny users="?"/>
</authorization>

ويمكن الاطلاع على أي من صفحاتي الأخرى من حساب / تسجيل الدخول ما لم مصادقة المستخدم.

والآن أحاول أن أضيف باي بال IPN إلى موقعي ولكي نفعل ذلك أنا بحاجة إلى صفحتين التي تتعامل مع تأكيد دفع باي بال وشكرا الصفحة. هاتين الصفحتين يجب أن تكون متاحة للمستخدمين المجهولين.

وأود هذه الصفحات أن تكون الإجراءات تحكم قبالة تحكم حسابي. هل هناك أي طريقة يمكنني تطبيق سمة لأساليب العمل المحددة التي جعلها متاحة للمستخدمين المجهولين؟ لقد وجدت العديد من المناصب هنا أن محاولة للقيام بذلك ولكن كان هناك معظم الناس يريدون السيناريو المعاكس.

وأساسا أريد قد AccountController فئة لديها أي تفويض لمعظم الطرق باستثناء عدد قليل. والآن يبدو فقط أسلوب تسجيل الدخول متاح للمستخدمين المجهولين.

هل كانت مفيدة؟

المحلول

ونعم يمكنك ذلك. في AccountController بك هناك و[تخويل] -attribute سواء على مستوى فئة (لجعل كل مراقب مقيد) أو على طرق محددة.

لجعل إجراءات محددة مقيدة لك ببساطة استخدام تخويل السمة على الطرق التي تتعامل مع هذه الإجراءات، وترك الطبقة تحكم مقيدة.

وفيما يلي بعض الأمثلة ... آمل أن يساعد

لتطلب من المستخدمين للدخول، واستخدام:

[Authorize]
public class SomeController : Controller

// Or
[Authorize]
public ActionResult SomeAction()

لتقييد الوصول لأدوار معينة، واستخدام:

[Authorize(Roles = "Admin, User")]
public class SomeController : Controller

// Or
[Authorize(Roles = "Admin, User")]
public ActionResult SomeAction()

ولتقييد الوصول لمستخدمين محددين، الاستخدام:

[Authorize(Users = "Charles, Linus")]
public class SomeController : Controller

// Or
[Authorize(Users = "Charles, Linus")]
public ActionResult SomeAction()

وكما ترون، يمكنك إما استخدام السمة في مستوى فئة أو على مستوى الأسلوب. اختيارك!

نصائح أخرى

وأنا لا أعتقد أن هناك "غير المصرح به" السمة التي يمكن تطبيقها على الإجراءات وإذا كنت لا تريد أن تضع "[تخويل]" على كافة ولكن اثنين من الإجراءات في وحدة تحكم حاول القيام بما يلي:

وفيما يلي طريقتين أستطيع أن أفكر في:

السمة

1- الموقع في الملف web.config (ليس متأكدا مما إذا كان هذا العمل مع MVC التوجيه الخ.)

وبعد الخاص بك

<system.web> stuff </system.web>

وفي ملف web.config، إضافة ما يلي:

  <location path="Account/ActionOne">
     <system.web>
           <authorization>
              <allow users ="*" />
          </authorization>
      </system.web>
  </location>

وأين الحساب / ActionOne هو اسم الأسلوب الإجراء الذي تريد منح حق الوصول المجهول إلى. للعمل الثاني، نسخ رمز أعلاه ولصقه مباشرة بعد ذلك وتغيير اسم العمل.

ولست متأكدا اذا كان هذا العمل بسبب MVC التوجيه الخ، ولكن محاولة إعطائها.

2- قاعدة تحكم

إذا لم الحل السابق العمل، وأفضل رهان يكون لإنشاء وحدة تحكم قاعدة التي زينت مع السمة تخويل:

[Authorize]
public class AuthorizeControllerBase : Controller {}

وبعد ذلك يكون كل حدات التحكم الخاصة بك ترث منه:

public class AccountController : AuthorizeControllerBase
{
      // your actions etc.
}

وهذا سيجعل أي وحدة تحكم يرث من AuthorizeControllerBase يتطلب ترخيص / تسجيل الدخول إلى التذرع بأي الطرق.

وبعد ذلك سوف تحتاج إلى إزالة من الملف web.config الخاص بك

وبدلا من تأمين جميع الموارد على موقع الويب الخاص بك افتراضيا ثم تبحث عن وسيلة لتوفير الوصول المجهول للموارد الفردية، وكنت أفضل ربما من اتخاذ النهج المعاكس. لم تقم بتحديد قواعد ترخيص في الملف web.config الخاص بك، ثم استخدام مرشحات التفويض (انظر الجواب MICKEL) لتأمين وحدات تحكم و / أو إجراءات فردية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top