سؤال

أريد تقييد الوصول إلى عنوان URL معين ما لم يكن المستخدم عضوا في أدوار 2 مختلفة. في هذه الحالة، أريد فقط منح الوصول إلى عنوان URL هذا إذا كان المستخدم في كل من التقارير و دور الأرشفة. هل هناك طريقة للقيام بذلك في ASP.NET؟

<location path="testpage.aspx">
<system.web>
  <authorization>
    <allow roles="Reporting, Archiving"/>
    <deny users="*"/>
  </authorization>
</system.web>

أريد شيئا من هذا القبيل:

<location path="testpage.aspx">
<system.web>
  <authorization>
    <allow roles="Reporting & Archiving"/>
    <deny users="*"/>
  </authorization>
</system.web>

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

المحلول

إنه نوع من القبيح، ولكن يمكنك أن ترث من موفر الدور الذي تستخدمه حاليا (SQLRoleProvider، WindowstAdokeRoleProvider)، وتجاوز getrolesoruser، اتصل بالتنفيذ الأساسي للحصول على الأدوار، وتجمع بينها حسب الضرورة هناك. ثم من الواضح أن وضع موفر دورك المخصص في Web.config فيu003CroleManager> قسم التكوين.

كنت بحاجة فقط إلى تجاوز طريقة واحدة (وربما GetUsersInrole) ودمجها حسب الضرورة.

public override string[] GetRolesForUser( string username ) {
    List<string> roles = new List<string>( base.GetRolesForUser(username) );
    if( roles.Contains("Reporting") && roles.Contains("Archiving") ) {
        roles.Add("ReportingAndArchiving");
    }
    return roles.ToArray();
}

نصائح أخرى

يمكنك إنشاء وظيفة SQL التي، مع إعطاء معرف مستخدم معين، عنوان URL للصفحة، وقائمة الأدوار المسموح بها (XML)، وإرجاع بعض الشيء مما يدل على ما إذا كان يتم منح الوصول إلى عنوان URL هذا، ثم استخدم ذلك لاحقا لتعيين العلم الذي سيحدد ما إذا كان لإظهار أنه كخيار صالح في قائمة JavaScript أو DHTML أو أيا كان.

تستطيع تنفيذ موفر دور مخصص. وبعد ثم يمكنك تحديد تقرير "وهمية" جديد وتفحص ما إذا كان المستخدم ينتمي إلى إعداد التقارير والأرشفة داخل طريقة ISUSERINROLE عند طلب الدور Reportingandarchiving.

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