Inhalte aufrufen

Profilbild
- - - - -

(Version 5) Produktdetailseite: Produktkaufe verhindern für bestimmte Kundengruppe

"\r\n48534

  • Bitte melden Sie sich an, um eine Antwort zu verfassen.
9 Antworten zu diesem Thema

#1 wseibel

wseibel

    Benutzer

  • Members
  • 26 Beiträge

Geschrieben: 11 December 2023 - 08:57

Hallo,

 

wie kann ich den Kaufbutton verbergen für bestimmte Kundengruppen?

Standardmäßig kann man nur Produkte für eine Kundegruppe komplett verbergen/ausblenden.

 

wie müsste ich die Produkt.Offer.cshtml anpassen, damit ich dort die gerade eingeloggte Kundengruppe abfragen kann und den Kaufbutton entsprechend ein/ausblenden kann. Kann man an dieser Stelle eigentlich auch in den cshtml Dateien eine eigene Datenbankabfrage machen? Ich muss nämlich auch wissen, ob das gerade aktuell offene Produkte für einen bestimmten Kunden freigeben ist.

 

Oder gibt es noch eine andere Lösung, z.B. über den viel gelobten Rule Builder?


Sydesoft GmbH
Haferstr. 20
49324 Melle
Tel.: +49 5422 96 399 25
Web:

http://www.sydesoft.de

https://www.sydesoft.de/webshop-erstellen.html

 

 

 


#2 stefanmueller

stefanmueller

    SmartStore AG

  • Administrators
  • 462 Beiträge

Geschrieben: 11 December 2023 - 11:20

Hallo, könntest du das entsprechende codeschnippsel posten, das du konkret abändern möchtest? (+ Version) Gruß, Stefan


Stefan


#3 Marcus Gesing

Marcus Gesing

    SmartStore AG

  • Administrators
  • 3802 Beiträge

Geschrieben: 11 December 2023 - 13:32

Die aktiven Kundengruppen des aktuellen Benutzers bekommt man in einer View wie folgt:
var customerRoleNames = WorkContext.CurrentCustomer.GetRoleNames().ToArray();
 
Datenbankabfragen sind auch aus einer View heraus möglich. Den DbContext erreicht man dort über CommonServices.DbContext. Das aktuelle Produkt laden z.B.
var product = await CommonServices.DbContext.Products.FindByIdAsync(Model.Id, false);
 
Ob das Produkt für eine Kundengruppe des aktuellen Benutzers freigegeben ist z.B. über
@using Smartstore.Core.Security;

var authorized = await CommonServices.Resolve<IAclService>().AuthorizeAsync(product);
 
Im Falle von Produkt.Offer.cshtml wird das immer "True" sein, weil die View sonst gar nicht aufgerufen und ein 404 angezeigt werden würde.

Marcus Gesing

Smartstore AG


#4 wseibel

wseibel

    Benutzer

  • Members
  • 26 Beiträge

Geschrieben: 11 December 2023 - 14:13

das sieht ja erstmal richtig gut aus, probiere ich gleich aus, aber eine frage noch: wenn ich eine eigene Tabelle in der smartstore datenbank erstellt habe, kann ich auf diese auch irgendwie zugreifen? :-) geht das irgendwie über datamigration oder so :) oder muss ich da ein eigenes SqlConnection ding machen?


Sydesoft GmbH
Haferstr. 20
49324 Melle
Tel.: +49 5422 96 399 25
Web:

http://www.sydesoft.de

https://www.sydesoft.de/webshop-erstellen.html

 

 

 


#5 wseibel

wseibel

    Benutzer

  • Members
  • 26 Beiträge

Geschrieben: 11 December 2023 - 14:41

ich habe jetzt überlegt, die anpassung doch eher in der datei BillingAddress.cshtml zu machen, aber da brauche ich trotzdem die skus des aktuellen warekorbs, um zu prüfen, ob der kunde diese skus überhaupt bestellen darf. ich muss dann in eine eigene tabelle schauen können, um festzustellen, ob da eine sku dabei ist, die nicht bestellt werden darf. d.h. ich muss doch nicht auf die kundengruppe prüfen, sondern in eine eigene tabelle schauen können.


Sydesoft GmbH
Haferstr. 20
49324 Melle
Tel.: +49 5422 96 399 25
Web:

http://www.sydesoft.de

https://www.sydesoft.de/webshop-erstellen.html

 

 

 


#6 Marcus Gesing

Marcus Gesing

    SmartStore AG

  • Administrators
  • 3802 Beiträge

Geschrieben: 11 December 2023 - 15:58

Ja, man kann auch auf eigene Tabellen zugreifen. Am besten man bindet den eigenen DbSet als Extension-Methode mit in den SmartDbContext ein, so wie hier zu sehen. Dann kann man wie hier drauf zugreifen.

Marcus Gesing

Smartstore AG


#7 wseibel

wseibel

    Benutzer

  • Members
  • 26 Beiträge

Geschrieben: 11 December 2023 - 16:14

ok danke, d.h. spätestens an dieser stelle komme ich nich um ien plugin bau herum, richtig?


Sydesoft GmbH
Haferstr. 20
49324 Melle
Tel.: +49 5422 96 399 25
Web:

http://www.sydesoft.de

https://www.sydesoft.de/webshop-erstellen.html

 

 

 


#8 Marcus Gesing

Marcus Gesing

    SmartStore AG

  • Administrators
  • 3802 Beiträge

Geschrieben: 11 December 2023 - 19:28

Ein Plugin ist zwar nicht zwingend notwendig, ich würde es aber empfehlen, um eigene Dinge vom Smartstore Core zu trennen.


Marcus Gesing

Smartstore AG


#9 wseibel

wseibel

    Benutzer

  • Members
  • 26 Beiträge

Geschrieben: 11 December 2023 - 20:16

ich konnte jetz ein test plugin erstellen, wo alle funktionen enthalten, die ich brauch. das war erstaunlich einfach :-), habe mich zu lange davor gedrückt :-).

 

eine detail frage habe ich noch. ich würde gerne von meinem IResultFilter eine redirect machen auf einen controller/modul und dabei will ich parameter an den controller geben. das funktioniert zwar mit dieser zeile:

  filterContext.Result = new RedirectToActionResult(nameof(TestModuleWarningController.Check), "TestModuleWarning", new { param1 = "blabla"});

das problem ist nur, dass die parameter als GET übergeben werden. wie könnte man das als POST übergeben, weil ich vermeiden will, dass die parameter oben in der url stehen.


Sydesoft GmbH
Haferstr. 20
49324 Melle
Tel.: +49 5422 96 399 25
Web:

http://www.sydesoft.de

https://www.sydesoft.de/webshop-erstellen.html

 

 

 


#10 Marcus Gesing

Marcus Gesing

    SmartStore AG

  • Administrators
  • 3802 Beiträge

Geschrieben: 12 December 2023 - 10:41

Ich würde die Wahl GET vs. POST nicht davon abhängig machen, sondern nur davon ob Daten gelesen (GET) oder auch geändert (POST, PUT etc.) werden.
Ich würde mal ausprobieren die Parameter mittels TempData zu übergeben. In einem IResultFilter kommt man da so wie hier zu sehen ran, nur mit dem Unterschied, dass hier TempData anstelle von ViewData verwendet werden muss.

Marcus Gesing

Smartstore AG