Skocz do zawartości
  • 0
cherro0125

Sprawdzanie uprawnień przez checkAcpPermission

Pytanie

Jak to dokładnie działa?

Mam restrykcje odpowiedzialną za dostęp do wyświetlania czegoś w ACP oraz kolejną odnośnie jednej z funkcji modułu. Problem polega na tym, że gdy zabiorę w uprawnieniach tą sprawdzaną w osobnej funkcji to wyskakuje błąd, że nie mam dostępu do tego modułu. Restrykcje główną sprawdzam w funkcji execute() zaś tą drugą w osobnej, która nie powinna się nawet wykonać przy zwykłym wyświetlaniu. 

 

Czy problemem może tutaj być hiperłącze w szablonie, które kieruje do wywołania tej funkcji? 

Edytowano przez cherro0125

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

12 odpowiedzi na to pytanie

Polecane posty

  • 0

a błąd dostajesz po sprawadzeniu tej do której nie masz dostępu czy jak?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
  • 0

W głównej funkcji mam sprawdzenie restrykcji dodanej przy utworzeniu kontrolera pod ACP. Dodałem restrykcje, która miała odpowiadać za opcje zarządzania tj. usuwanie, edycja itp. oraz sprawdzałem ją w dodanej funkcji która nie ma prawa się wykonać po zwyczajnym wejściu do modułu. Problem jest taki, że nawet jak zakomentuje linijkę ze sprawdzeniem restrykcji to do modułu dalej nie ma dostępu jeśli użytkownik nie ma ustawionych obu restrykcji lub do momentu aż nie usunę tej dodatkowej restrykcji. 

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
  • 0

to coś musiałeś namieszać. Link w menu się pokazuje czy też nie?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
  • 0

i na tą pozycję menu masz ustawione które uprawnienia? może inne uprawnienia sprawdzasz w module a inne ustawiłeś dla pozycji menu?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
  • 0

Tak wyglądają te restrykcje dodane na moduł :

https://gyazo.com/8df80ac73036f52bf565cba9aed7521b
1 uprawnienie odpowiada za wyświetlanie modułu i listowanie tego jako pozycji w menu. 
Je sprawdzam tu : 

public function execute()
	{
		\IPS\Dispatcher::i()->checkAcpPermission( 'supp_manage' );
		parent::execute();
	}

Zaś to drugie odpowiada w tym przypadku za odświeżanie :

 

public function suppRefresh()
	{

		\IPS\Dispatcher::i()->checkAcpPermission( 'supp_admin_manage' );


		foreach(\IPS\Db::i()->select('member_id','core_members',array("member_group_id=?",\IPS\Settings::i()->supporter_gid)) as $suppID)
		{
			if( \IPS\Db::i()->select( '*','admins',array("accountID=?",$suppID) )->count() == 0 )
			{
				\IPS\Db::i()->insert('admins', array(

					'accountID' => $suppID,
					'rank' => 1,
					'level' => 0,
					'perms' => json_encode(array())


				));
			}
		}
		\IPS\Output::i()->redirect( \IPS\Http\Url::internal("app=lslife&module=adminpanel&controller=supp"), 'Test!!!' );
	}

I w momencie kiedy nie są ustawione oba te uprawnienia wyskakuje taki oto błąd:

https://gyazo.com/63c3f9a70ad785b975bfb3074a7db2fa

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
  • 0

A pokaż jeszcze jak wygląda plik z restrykcjami ten jsonowy dla tego modułu

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
  • 0
{
    "charactertest": {
        "charactertest": {
            "charactertest_manage": "charactertest_manage"
        }
    },
    "testtest": {
        "testtest": {
            "testtest_manage": "testtest_manage"
        }
    },
    "characteracp": {
        "editcharacter": {
            "editcharacter_manage": "editcharacter_manage"
        },
        "items": {
            "items_manage": "items_manage"
        },
        "interiors": {
            "interiors_manage": "interiors_manage"
        }
    },
    "groupscp": {
        "create": {
            "create_manage": "create_manage"
        }
    },
    "changes": {
        "changes": {
            "changes_manage": "changes_manage"
        },
        "changeList": {
            "changeList_manage": "changeList_manage"
        }
    },
    "adminpanel": {
        "supp": {
            "supp_manage": "supp_manage",
            "supp_admin_manage": "supp_admin_manage"
        },
        "cmpanel": {
            "cmpanel_manage": "cmpanel_manage"
        }
    }
}

 

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
  • 0

Hmm niby jest ok. Zerknij sobie do: /system/Member/Member.php metoda: hasAcpRestriction. Tam masz taki fragment kodu:

		$appKey = is_string( $app ) ? $app : $app->directory;
		if ( array_key_exists( $appKey, $restrictions['applications'] ) )
		{
			if ( $module === NULL )
			{
				return TRUE;
			}
			else
			{
				$moduleKey = ( $module === NULL or is_string( $module ) ) ? $module : $module->key;
				if ( in_array( $moduleKey, $restrictions['applications'][ $appKey ] ) )
				{
					if ( $key === NULL )
					{
						return TRUE;
					}
					elseif ( isset( $restrictions['items'][ $appKey ][ $moduleKey ] ) and in_array( $key, $restrictions['items'][ $appKey ][ $moduleKey ] ) )
					{
						return TRUE;
					}
				}
			}
		}

Powinno wejść w te warunki i sprawdzać tutaj

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
  • 0
$appKey = is_string( $app ) ? $app : $app->directory;
		if ( array_key_exists( $appKey, $restrictions['applications'] ) )
		{
			if ( $module === NULL )
			{
				return TRUE;
			}
			else
			{
				$moduleKey = ( $module === NULL or is_string( $module ) ) ? $module : $module->key;
				if ( in_array( $moduleKey, $restrictions['applications'][ $appKey ] ) )
				{
					if ( $key === NULL )
					{
						return TRUE;
					}
					elseif ( isset( $restrictions['items'][ $appKey ][ $moduleKey ] ) and in_array( $key, $restrictions['items'][ $appKey ][ $moduleKey ] ) )
					{
						return TRUE;
					}
				}
			}
		}

Mam coś takiego więc raczej wygląda wszystko okay. Dziwne czasem jest to, że mimo zakomentowania linijek ze sprawdzaniem tych restrykcji to dalej nie ma dostępu do modułu gdy użytkownik nie ma ich obu ustawionych. :/

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
  • 0

No to wtedy co innego musi tutaj odrzucać uprawnienia

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Bądź aktywny! Zaloguj się lub utwórz konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony


  • Kto przegląda   0 użytkowników

    Brak zalogowanych użytkowników przeglądających tę stronę.

×

Ważne informacje

Kontynuując przeglądanie strony, wyrażasz zgodę na używanie przez nas plików cookies.