كيف يمكنني اجتياز أكثر من قيمة إلى طريقة Custom RolomProvider GetUlileS في تطبيق MVC الخاص بي؟

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

سؤال

أرغب في الغراء نظام الإذن المخصص الخاص بي في تطبيق ASP.NET MVC جديد. لقد قمت بمبلغ عادل من العمل كتابة مؤلفتي المخصصة الخاصة بي للتطبيق. لقد كتبت أيضا عضويتي المخصصة الخاصة بي التطبيقات والمباراة. كل هذا يعمل بشكل جميل، حتى أحتاج إلى التحقق من أدوار المستخدم الخاص بي هو جزء منه. لقد فعلت كل هذا حتى أتمكن من القيام بذلك ببساطة على وحدات التحكم الخاصة بي، واستخدمت قالب MVC الافتراضي في VS2010 إلى الرجعية تناسب التعليمات البرمجية الخاصة بي كنسخة أوابية:

[CustomAuth(Roles='X')]
public ActionResult DoSomething()

نظامي المخصص هو أقض قليلا. أنا لا أتصل في SQL DB. إنها Webservice بسيطة توفر 3 طرق: CheckPassword، GetPermissions، Weblogin. Weblogin ببساطة يلف كل من كلم checkpassword و getpermissions في مكالمة واحدة. عند استخدام Weblogin من داخل ValidateUser لم يعمل، اتصلت بشبكة TestPassword من داخل OpsionHipProvider.ValidateUser (اسم المستخدم، كلمة المرور) وعندما كانت هذه المكالمة ناجحة، فسوف أعود إلى استعادة استخدام UERFERID، وإلا فسوف يفشل وأود أن أعود فارغة.

المشكلة هي عندما أتصل بتنفيذه من المباراة. محددة من فئة مجردة المحددة مع معلمة واحدة من اسم المستخدم. تحتاج طريقة GetPermissions () الخاصة بي إلى أكثر من اسم مستخدم واحد للعمل. يتم تعريفه مثل ذلك:

GetPermissions(privateKey,userName)

من الواضح أن استدعاء هذا من خلال طريقة دور دوراة التالية لن يعمل. لا يمكنني تمرير Priverkey إلى الطريقة التي يتم دعمها خارج الصندوق.

public override string[] GetRolesForUser(string username)

هل من المستحيل الحصول على طريقة مخصصة الخاصة بي التي تم استدعاؤها من داخل المباراة المخصصة الخاصة بي؟

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

المحلول

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

    RoleProvider rp = Roles.Provider;
    (rp as MyRoleProvider).GetPermissions(privateKey,userName);

نصائح أخرى

وأعتقد أنه ينبغي أن يكون:

(RoleProvider as MyRoleProvider).GetPermissions(privateKey,userName);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top