Portál AbcLinuxu, 4. listopadu 2025 05:36
policy {
....
special_access {
    if ("%{Realm}" == 'core') {
        if ("%{sql:SELECT special_priv FROM table WHERE username = '%{User-Name}'}" != '1') {
            reject
        }
    }
}
...
}
Definovanou politiku pak uplatnis v ramci authorizacni sekce.
authorize {
...
special_access
...
}
            where.... and nasid='%{NAS-Identifier}'
            
(1)     policy special_access {
(1)       if ("%{Realm}" == 'core') {
(1)       ERROR: Failed retrieving values required to evaluate condition
(1)     } # policy special_access = ok
(1)   } # authorize = ok
A pritom v logu Mysql se vubec neukazuje, ze by se ten SELECT pokusil provest. Tak nevim. V sites-enabled/default v sekci "authorize" mam odkomentovano jak "sql", tak to svoje "special_access", ktery vypada nasledovne:
special_access {
    
    if ("%{Realm}" == 'core') {
        if ("%{sql: SELECT access FROM special_access WHERE username = '%{User-Name}'}" != 'core') {
            reject
        }
    }
}
Jdu se zkusit poprat s tim Vasim resenim.
            | username | attribute | op | value | | franta | Mikrotik-Group | = | read |Jenze co kdyz chci, aby mel franta "read" pristup do mikrotiku s realmem "core", ale "write" pristup do mikrotiku s realmem "edge"? Jako nejjednodussi se mi jevi moznost, ze kdyz v sekci "authorize" nactu z databaze, ze franta ma do "edge" mikrotiku povoleny pristup "write", tak nejakym prikazem odeslu "Mikrotik-Group = write" Diky moc
special_access {
    
    if ("%{Mikrotik-Realm}" == 'edge') {
        if ("%{sql: SELECT access FROM special_access WHERE username = '%{User-Name}'}" != 'edge') {
            reject
        }
        
        update reply {
            &Mikrotik-Group = "write"
        }
    }
}
Ted jeste musim prijit na to, jak to opravneni nenastavovat rucne, ale vycist ho z databaze 
            ATTRIBUTE User-Group 3001 stringPotom vysledna "policy" muze vypadat takto:
special_access {
    
    if ("%{Mikrotik-Realm}" == 'edge') {
        if ("%{sql: SELECT realm FROM special_access WHERE username = '%{User-Name}'}" != 'edge') {
            reject
        } else {
            update reply {
                &User-Group = "%{sql:SELECT group from special_access where username = '%{User-Name}' LIMIT 1}"
                &Mikrotik-Group = "%{reply:User-Group}"
            }
        }
    }
    
}
Zatim je to takove neucesane, ale funguje to.
Diky za vas cas a mejte se
            
        Tiskni
            
                Sdílej:
                
                
                
                
                
                
            
    
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.