Ergebnis 1 bis 5 von 5

Thema: ACL-Zugriffsrechte

  1. #1
    Forum Guru Avatar von The User
    Registriert seit
    28.10.2007
    Ort
    Zwischen Pazifik und Atlantik...
    Beiträge
    4.044
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard ACL-Zugriffsrechte

    Hallo!

    Ich möchte Zugriffsrechte für bestimmte Daten in einer MySQL-Datenbank speichern. Hierfür dachte ich mir, dass man bei jeder Aktion speichert, welche speziellen Benutzer und welche Gruppen von Benutzern sie für welchen Datensatz durchführen können.
    Mit einigen Tabellen habe ich das auch hinbekommen, ich bin allerdings sicherlich kein (My)SQL-Guru und mich würde sehr interessieren, ob vielleicht jemand eine bessere Idee hat (insbesondere meine Abfragen mit Sub-Selects sehen recht komplex aus). Wenn mir jemand sagen würde, dass es so in Ordnung ist - auch kein Problem.

    Ich habe mal ein kleines Beispiel konstruiert:
    -articles: Die Daten, für deren Zugriff Rechte verwaltet werden müssen.
    -users: Die Benutzer mit Namen.
    -groups: Benutzergruppen mit Namen.
    -belonging: n:m-Relation zwischen users und groups.
    -acl_users_articles_read: n:m-Relation zwischen den Artikeln und den Benutzern, die sie lesen dürfen.
    -acl_groups_articles_read: n:m-Relation zwischen den Artikeln und den Gruppen, deren Mitglieder sie lesen dürfen.

    Die Tabellen (MySQL-Export):
    Code:
    --
    -- Tabellenstruktur für Tabelle `acl_groups_articles_read`
    --
    
    CREATE TABLE IF NOT EXISTS `acl_groups_articles_read` (
      `articleid` int(10) unsigned NOT NULL,
      `groupid` int(10) unsigned NOT NULL,
      UNIQUE KEY `articleid` (`articleid`,`groupid`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
    
    --
    -- Daten für Tabelle `acl_groups_articles_read`
    --
    
    INSERT INTO `acl_groups_articles_read` (`articleid`, `groupid`) VALUES
    (2, 1),
    (3, 2),
    (4, 3),
    (5, 1);
    
    -- --------------------------------------------------------
    
    --
    -- Tabellenstruktur für Tabelle `acl_users_articles_read`
    --
    
    CREATE TABLE IF NOT EXISTS `acl_users_articles_read` (
      `articleid` int(10) unsigned NOT NULL,
      `userid` int(10) unsigned NOT NULL,
      UNIQUE KEY `articleid` (`articleid`,`userid`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
    
    --
    -- Daten für Tabelle `acl_users_articles_read`
    --
    
    INSERT INTO `acl_users_articles_read` (`articleid`, `userid`) VALUES
    (2, 1),
    (3, 2),
    (4, 3),
    (5, 4);
    
    -- --------------------------------------------------------
    
    --
    -- Tabellenstruktur für Tabelle `articles`
    --
    
    CREATE TABLE IF NOT EXISTS `articles` (
      `id` int(10) unsigned NOT NULL auto_increment,
      `name` text NOT NULL,
      `text` text NOT NULL,
      PRIMARY KEY  (`id`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;
    
    --
    -- Daten für Tabelle `articles`
    --
    
    INSERT INTO `articles` (`id`, `name`, `text`) VALUES
    (2, 'hallo', 'Hallo du da!'),
    (3, 'bla', 'Blablabla'),
    (4, 'xyz', 'XYZ!'),
    (5, 'abc', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ');
    
    -- --------------------------------------------------------
    
    --
    -- Tabellenstruktur für Tabelle `belonging`
    --
    
    CREATE TABLE IF NOT EXISTS `belonging` (
      `userid` int(10) unsigned NOT NULL,
      `groupid` int(10) unsigned NOT NULL,
      UNIQUE KEY `userid` (`userid`,`groupid`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
    
    --
    -- Daten für Tabelle `belonging`
    --
    
    INSERT INTO `belonging` (`userid`, `groupid`) VALUES
    (1, 1),
    (1, 3),
    (2, 1),
    (2, 3),
    (3, 2),
    (3, 3),
    (4, 2),
    (4, 3);
    
    -- --------------------------------------------------------
    
    --
    -- Tabellenstruktur für Tabelle `groups`
    --
    
    CREATE TABLE IF NOT EXISTS `groups` (
      `id` int(10) unsigned NOT NULL auto_increment,
      `name` varchar(16) NOT NULL,
      PRIMARY KEY  (`id`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;
    
    --
    -- Daten für Tabelle `groups`
    --
    
    INSERT INTO `groups` (`id`, `name`) VALUES
    (1, 'admins'),
    (2, 'users'),
    (3, 'all');
    Eine Abfrage (uid ist dabei die Benutzer-ID für die gefiltert wird):
    Code:
    SELECT *  FROM articles
      WHERE uid IN
        (SELECT acl_users_articles_read.userid FROM acl_users_articles_read
          WHERE acl_users_articles_read.articleid = articles.id)
      OR uid IN
        (SELECT belonging.userid FROM belonging
          WHERE belonging.groupid IN
            (SELECT acl_groups_articles_read.groupid FROM acl_groups_articles_read
              WHERE acl_groups_articles_read.articleid = articles.id)
        )
    Danke im Voraus!

    The User
    Achtung: Dies ist ein alter Thread im HTML und Webmaster Forum
    Diese Diskussion ist älter als 90 Tage. Die darin enthaltenen Informationen sind möglicherweise nicht mehr aktuell. Erstelle bitte zu deiner Frage ein neues Thema im Forum !!!!!
    Geändert von The User (29.12.2009 um 17:57 Uhr) Grund: Nun kann man die Abfrage auch ordentlich lesen ;)

  2. #2
    der/die Göttliche Avatar von jojo87
    Registriert seit
    23.03.2007
    Ort
    Leipzig
    Alter
    30
    Beiträge
    3.131
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard AW: ACL-Zugriffsrechte

    solange die Abfrage funktioniert, passt das schon
    Insgesamt finde ich es von daher umständlich, dass es nur für ein bestimmtest Szenario funktioniert. Hast du dir schon mal die ACL-Lösungen von Zend_Acl oder PEAR_LiveUser angesehen?

  3. #3
    Forum Guru
    Themenstarter
    Avatar von The User
    Registriert seit
    28.10.2007
    Ort
    Zwischen Pazifik und Atlantik...
    Beiträge
    4.044
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard AW: ACL-Zugriffsrechte

    Was meinst du mit einem "bestimmten Szenario"? Meinst du, dass man ein bestimmtes Standard-Verhalten hinzufügen könnte? Oder anhand welcher Felder die Rechte zugeordnet werden? Oder etwas mit Deny-Listen, oder...?
    Geändert von The User (04.01.2010 um 14:58 Uhr)

  4. #4
    der/die Göttliche Avatar von jojo87
    Registriert seit
    23.03.2007
    Ort
    Leipzig
    Alter
    30
    Beiträge
    3.131
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard AW: ACL-Zugriffsrechte

    du fragst explizit ab, ob ein Nutzer Rechte für einen bestimmten Artikel hat. Sobald du dann vielleicht eine Produktbeschreibung oder was auch immer hast, musst du den Spaß wieder abfragen.
    Besser finde ich es, dass zu abstrahieren, wie es in einigen objektorientierten ACL's der Fall ist (siehe Oben).

  5. #5
    Forum Guru
    Themenstarter
    Avatar von The User
    Registriert seit
    28.10.2007
    Ort
    Zwischen Pazifik und Atlantik...
    Beiträge
    4.044
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard AW: ACL-Zugriffsrechte

    Achso, keine Sorge, das abstrahiere ich schon, aber prinzipiell ist es doch keine Schande, den Kram direkt in die Queries einzubauen, solange man abstrahiert.

Ähnliche Themen

  1. Zugriffsrechte
    Von Gast im Forum PHP Forum - Apache - CGI - Perl - JavaScript und Co.
    Antworten: 3
    Letzter Beitrag: 20.12.2007, 19:39
  2. Zugriffsrechte
    Von 00eraser00 im Forum Zope & Plone - das deutsche Hilfeforum
    Antworten: 4
    Letzter Beitrag: 15.08.2006, 15:28
  3. Zugriffsrechte
    Von m.dot im Forum Zope & Plone - das deutsche Hilfeforum
    Antworten: 1
    Letzter Beitrag: 27.06.2006, 00:42
  4. PHP Zugriffsrechte
    Von FR0SCH im Forum Webhoster - Provider - (free) Webspace - Server - Domain
    Antworten: 1
    Letzter Beitrag: 17.07.2005, 18:06
  5. zugriffsrechte
    Von vv im Forum PHP Forum - Apache - CGI - Perl - JavaScript und Co.
    Antworten: 8
    Letzter Beitrag: 16.01.2005, 12:46

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •