Yanıtlar:
Zaten bulduğumdan beri bu görevde , emin de yorumları okumak olun. Bir rol için denetlemenin neden izin denetlemesinin önerildiği açıkça açıklanmaktadır. İzinleri kullandığınızda, bu izni sisteminizi daha esnek hale getiren birden çok role atayabilirsiniz. Ayrıca, rollerin yeniden adlandırılabileceğini ve kodunuzu bozacağını unutmayın.
Bununla birlikte, bir rolü kontrol etmek istiyorsanız, şunları yapabilirsiniz:
// Load the currently logged in user.
global $user;
// Check if the user has the 'editor' role.
if (in_array('editor', $user->roles)) {
// do fancy stuff
}
Mevcut kullanıcının tek bir rolü veya birden fazla rolün olup olmadığını kontrol etmek için harika bir yol:
//can be used in access callback too
function user_has_role($roles) {
//checks if user has role/roles
return !!count(array_intersect(is_array($roles)? $roles : array($roles), array_values($GLOBALS['user']->roles)));
};
if (user_has_role(array('moderator', 'administrator'))) {
// $user is admin or moderator
} else if(user_has_role('tester')){
// $user is tester
} else{
// $user is not admin and not moderator
}
Drupal versiyonu için güncelleme> = 7.36
User_has_role işlevini Drupal API https://api.drupal.org/api/drupal/modules%21user%21user.module/function/user_has_role/7 adresinden kullanabilirsiniz .
Bu örneği deneyin:
<?php
function MYMODULE_foo() {
$role = user_role_load_by_name('Author');
if (user_has_role($role->rid)) {
// Code if user has 'Author' role...
}
else {
// Code if user doesn't have 'Author' role...
}
$user = user_load(123);
if(user_has_role($role->rid, $user)) {
// Code if user has 'Author' role...
}
else {
// Code if user doesn't have 'Author' role...
}
}
?>
Devel modülünü kurabilir ve dpm ($ user) yapabilirsiniz. Bu, kullanıcı rolü de dahil olmak üzere tüm kullanıcı bilgilerinin yer aldığı bir diziyi basacaktır.
Bu diziden "rollerin" dizi konumunu bulabilir ve kullanıcı rolünü bulmak için modülünüzde kullanabilirsiniz.
Rol adının değişmesi durumunda geleceğe dönük olmak, veritabanındaki rol tablosunda bulunabilecek rol kimliğini (kurtulmak) kontrol etmek en iyisidir.
16'yı kurtaran bir rol olup olmadığını kontrol etmek istiyorsanız, şunları yapın:
// Load the currently logged in user.
global $user;
// Check if the user has the 'editor' role, when 'editor' has role id 16
if (array_key_exists(16, $user->roles)) {
// do fancy stuff
}
İşte gerçek kod açıklama en iyi uygulama olarak kabul edilen cevap anılır
<?php
function mymodule_perm() {
return array('access something special');
}
function dosomethingspecial() {
// For current user
if (user_access('access something special')) {
// Doing something special!
}
// For a specific user
if (user_access('access something special', $theuser)) {
// Doing something special!
}
}
?>
Bir kullanıcının rolünü print_r ($ user) ile kontrol edebilirsiniz ve sonuçta böyle bir şey elde edersiniz.
stdClass Nesnesi ( [uid] => 0 [ana bilgisayar adı] => :: 1 [roller] => Dizi ( [1] => anonim kullanıcı // Şu anki kullanıcı rolü mayın sizin durumunuzda anonim )