প্রোগ্রামের মাধ্যমে ভূমিকার জন্য কীভাবে অনুমতি বরাদ্দ করবেন?


26

আমার কাছে কিছু অনুমতি রয়েছে যা আমি সহজ ইনস্টলেশন করার জন্য প্রোগ্রামে কিছু ভূমিকা নিযুক্ত করতে চাই।

যেহেতু আমি মডিউলটি ইনস্টল করছি এবং অনুমতি এবং ভূমিকা উভয়ই তৈরি করছি, আমার ভূমিকা আইডি নেই, যেখানে আমি অনুমতিগুলি সেট করতে চাই। এখনও অবধি আমি প্রোগ্রামালিকভাবে ভূমিকা নির্ধারণের জন্য কেবলমাত্র উপায় খুঁজে পেয়েছি যার ভূমিকা আইডির প্রয়োজন।

আমি অবাক হয়েছি যদি আমি কোনওভাবে তাদের নামগুলি (স্ট্রিং) দিয়ে ভূমিকাগুলি সন্ধান করতে পারি, ভূমিকা আইডিটি পুনরুদ্ধার করতে পারি এবং তারপরে অনুমতি নির্ধারণ করতে পারি। এটা ঠিক ঠিক মনে হচ্ছে না।


অনুমতি সারণী ভূমিকা নাম ব্যবহার করে না, ভূমিকা আইডি ব্যবহার করে। আপনার ভূমিকা আইডি পাওয়া দরকার এবং তারপরে সেই আইডি ব্যবহার করে অনুমতি যুক্ত করতে হবে। অনুমতি টেবিলটির পরে অনুমতিটির জন্য স্ট্রিং দরকার হয় এবং এটি প্রয়োগকারী মডিউলের নাম (কমপক্ষে দ্রুপাল 7 এ); আমি নিশ্চিত নই যে মডিউলটির নামটি সত্যিই কোনওভাবে ব্যবহৃত হয়েছে কিনা।
কিমলালুনো

এমন কোনও কিছুর সুনির্দিষ্ট যা আপনার ব্যবহার করা উচিত কোড সম্পর্কে বুঝতে পারছেন না? আপনি কোন কোড ব্যবহার করেছেন? আপনার কোড দেখাচ্ছে দরকারী হবে; এটি আপনাকে কী করতে হবে (যেমন আপনার কোডটিতে কী ভুল আছে তা জানানোর জন্য) পরামর্শ দেওয়ার জন্য কে উত্তর দিতে সহায়তা করবে।
kiamlaluno

উত্তর করার জন্য ধন্যবাদ. আমি মনে করি আমাকে ডাটাবেসে আইডি সন্ধান করতে হবে। এটি এত কঠিন হওয়া উচিত নয়।
ভোগেলস্যাং

উত্তর:


1

বৈশিষ্ট্যগুলির মডিউলটি এটি বেশ সুন্দরভাবে করেছে, আপনাকে একের মধ্যে ভুমিকা এবং অনুমতিগুলি (এবং অন্যান্য অনেকগুলি জিনিস) রফতানি করার অনুমতি দেয়:

http://drupal.org/project/features

তবে আপনি যদি নিজের নিজস্ব চেক আউট অনুমতিগুলি এপিআই রোল করতে চান তবে:

http://drupal.org/project/permissions_api


2
সমস্যাটি হ'ল আপনি যখন বৈশিষ্ট্যগুলি ব্যবহার করেন তখন রোল আইডিটি জানেন না কারণ আপনি যখন আপনার বৈশিষ্ট্যটি ইনস্টল করেন তখন সেগুলি নিযুক্ত করা হয়। অতএব, অনুমতিগুলি নির্ধারণের জন্য আপনাকে কোনওভাবে আইডিগুলি সন্ধান করতে হবে। এটি সম্ভবত ডাটাবেসটিতে কেবল একটি চেহারা।
ভোগেলস্যাং

24

বৈশিষ্ট্যগুলি এই জাতীয় জিনিসগুলির জন্য বেশ কার্যকর hand তবে, আপনার যদি ভূমিকা তৈরি করতে এবং প্রোগ্রামিকভাবে অনুমতিগুলি যুক্ত করার প্রয়োজন হয়, আপনাকে নিজের ডাটাবেসটি খনন করতে হবে না।

আপনি যখন একটি নতুন ব্যবহারকারীর ভূমিকাটি তৈরি করবেন user_role_save(), এটি আপনাকে বরাদ্দ করা নতুন ব্যবহারকারীর ভূমিকা আইডির সাথে পাস করা অবজেক্টটি আপডেট করবে। আপনি standard_install()স্ট্যান্ডার্ড ইনস্টলেশন প্রোফাইলে ফাংশনটিতে এর উদাহরণ দেখতে পাচ্ছেন ।

$admin_role = new stdClass();
$admin_role->name = 'administrator';
...
user_role_save($admin_role);
user_role_grant_permissions($admin_role->rid, array_keys(module_invoke_all('permission')));

এই উদাহরণটি দেখায় যে আপনি একটি নতুন ব্যবহারকারীর ভূমিকা তৈরি করতে পারেন, তারপরে তার ridসম্পত্তিটি অ্যাক্সেস করতে পারেন যা দ্বারা পূরণ করা হয়েছিল user_role_save()। এটি সেই ভূমিকার সাথে কীভাবে অনুমতি যুক্ত করতে হয় তাও দেখায় user_role_grant_permissions()। এক্ষেত্রে, এটি 'প্রশাসক' ভূমিকা সমস্ত উপলব্ধ অনুমতি প্রদান করে role

আপনার যদি অন্য কারও দ্বারা নির্মিত কোনও ব্যবহারকারী ভূমিকার আইডি পেতে প্রয়োজন হয় তবে আপনি user_role_load_by_name()সেই ব্যবহারকারীর ভূমিকার জন্য অবজেক্টটি পেতে পারেন । তারপরে আপনি কেবল আইডিটি ধরুন $role->rid


2
একযোগে একাধিক অনুমতি প্রদান / বাতিল করার জন্য এটি দুর্দান্ত: api.drupal.org/api/drupal/modules%21user%21user.module/function/…
ব্রায়ান উড


20

আমি একটি কোড উদাহরণ যুক্ত করতে চাই যা বিদ্যমান ভূমিকাগুলিকে প্রোগ্রামগতভাবে অনুমতিগুলি কীভাবে নির্ধারণ করতে হয় তার মূল প্রশ্নের নিকটেই।

আপনি তাদের নামগুলি সহ ভূমিকাগুলি সন্ধান করতে পারেন, ভূমিকা আইডিটি পুনরুদ্ধার করতে পারেন এবং তারপরে নীচের মতো অনুমতিগুলি বরাদ্দ করতে পারেন (উদাহরণস্বরূপ হুক_আপডেট বাস্তবায়নে):

function custommodule_update_7001() {
  $permissions = array('view my custom entity');
  foreach(array('anonymous user', 'authenticated user') as $role_name) {
    $role = user_role_load_by_name($role_name);
    user_role_grant_permissions($role->rid, $permissions);
  }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.