Jump to content
  • 0
cherro0125

Sprawdzanie uprawnień przez checkAcpPermission

Question

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? 

Edited by cherro0125

Share this post


Link to post
Share on other sites

12 answers to this question

Recommended Posts

  • 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. 

Share this post


Link to post
Share on other sites
  • 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

Share this post


Link to post
Share on other sites
  • 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"
        }
    }
}

 

Share this post


Link to post
Share on other sites
  • 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

Share this post


Link to post
Share on other sites
  • 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. :/

Share this post


Link to post
Share on other sites
  • 0

Tylko pytanie co. 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...

Important Information

W celu świadczenie usług przez nasz Serwis na najwyższym poziomie, w ramach Serwisu wykorzystujemy pliki Cookies (tzw. ciasteczka). Korzystając ze stron Serwisu IPSBEYOND.PL bez zmiany ustawień przeglądarki będą one zapisane w pamięci urządzenia. Jeżeli nie dokonacie Państwo zmiany ustawień przeglądarki internetowej to wyrażacie zgodę na zapisywanie plików Cookies.