Introduction
১️ $user->givePermissionTo('edit articles');
👉 এই user নিজে নিজে একটা কাজের অনুমতি পেল।
মানে:
ইব্রাহিম এখন সরাসরি edit articles করতে পারবে।
➡ এখানে role দরকার নেই
➡ সরাসরি permission দেওয়া হয়েছে
২️ $role->givePermissionTo('edit articles');
👉 একটা role কে permission দেওয়া হলো।
মানে:
যে কেউ এই role পাবে, সে এই কাজ করতে পারবে।
৩️ $user->assignRole('writer');
👉 user কে একটা role দেওয়া হলো।
মানে:
ইব্রাহিম এখন writer হলো।
আর যদি writer role এ আগে থেকেই
edit articles permission থাকে —
তাহলে ইব্রাহিমও automatically edit করতে পারবে
আপনি Laravel-এ $user->can('edit articles'); ব্যবহার করলে এর মানে হলো:
“এই $user ব্যবহারকারীটির ‘edit articles’ পারমিশন আছে কিনা তা পরীক্ষা করা।”
বাংলায় বিস্তারিত ব্যাখ্যা:
-
$user – এটি আপনার ব্যবহারকারী অবজেক্ট, সাধারণত
Userমডেল। -
can('edit articles') –
canহলো Laravel বা Spatie Permission প্যাকেজের মেথড, যা চেক করে ব্যবহারকারীর কাছে নির্দিষ্ট পারমিশন আছে কি না। এখানে'edit articles'হলো পারমিশনের নাম। -
ফলাফল – এটি Boolean (true/false) রিটার্ন করে:
-
true→ ব্যবহারকারীর কাছে পারমিশন আছে। -
false→ ব্যবহারকারীর কাছে পারমিশন নেই।
-
উদাহরণ:
if ($user->can('edit articles')) {
echo "আপনি আর্টিকেল এডিট করতে পারবেন।";
} else {
echo "আপনার পারমিশন নেই।";
}Sync Permissions To A Role
Multiple permissions can be synced to a role using either of these methods:
একটি রোলে একাধিক পারমিশন (অনুমতি) সিঙ্ক করা একটি রোলে একাধিক পারমিশন যুক্ত বা সিঙ্ক করতে আপনি এই দুইটি পদ্ধতির মধ্যে যেকোনো একটি ব্যবহারকরতে পারেন: $role->syncPermissions($permissions); এখানে $role হলো আপনার রোল অবজেক্ট। $permissions হলো সেই পারমিশনের অ্যারে বা কালেকশন যা আপনি রোলে যুক্ত করতে চান। এটি রোলে থাকা পূর্বের পারমিশনগুলো মুছে ফেলে এবং নতুনভাবে দেওয়া পারমিশনগুলো যুক্ত করে। $permission->syncRoles($roles); এখানে $permission হলো পারমিশন অবজেক্ট। $roles হলো সেই রোলের অ্যারে বা কালেকশন যেখানে আপনি এই পারমিশনটি যুক্ত করতে চান। এটি নির্দিষ্ট পারমিশনটিকে একাধিক রোলে সিঙ্ক করে। সংক্ষেপে: $role->syncPermissions() → রোলে নতুন পারমিশন সেট করা। $permission->syncRoles() → পারমিশনকে একাধিক রোলে যুক্ত করা।Remove Permission From A Role
A permission can be removed from a role using either of these methods:
আপনি যখন একটি রোল থেকে কোনো পারমিশন সরাতে চান, তখন এই দুইটি পদ্ধতির মধ্যে যেকোনোএকটি ব্যবহার করতে পারেন: রোল দিয়ে পারমিশন সরানো $role->revokePermissionTo($permission); এটি সেই রোল থেকে নির্দিষ্ট পারমিশনটি বাতিল করে দেবে। পারমিশন দিয়ে রোল থেকে সরানো $permission->removeRole($role); এটি পারমিশনটির সাথে যুক্ত রোল থেকে সেটি সরিয়ে দেয়। সরাসরি বলতে গেলে: একটি রোল থেকে পারমিশন সরাতে $role->revokePermissionTo()বা $permission->removeRole() ব্যবহার করা হয়।Prerequisites
Must not have a [role] or [roles] property/relation, nor a [roles()] method
আপনার User মডেল/অবজেক্টে role বা roles প্রপার্টি/রিলেশন থাকা যাবে না আপনার User মডেল/অবজেক্টে কখনও role বা roles নামের প্রপার্টি (বা ডাটাবেজে কলাম) থাকা যাবে না। এছাড়াও roles() নামের কোনো মেথড বা রিলেশনও থাকা চলবে না। কারণ: HasRoles ট্রেইট (যা Spatie Permission প্যাকেজ দিয়ে আসে) ইতিমধ্যেই রোল এবং পারমিশন সম্পর্কিতপ্রপার্টি, মেথড ও রিলেশন যোগ করে। যদি আপনার মডেলে এগুলো আগে থেকেই থাকে,তাহলে HasRoles-এর ফাংশনগুলোর সাথে কনফ্লিক্ট হবে এবংপারমিশন/রোল চেক করার সময় অপ্রত্যাশিত ফলাফল দেখাবে। সংক্ষেপে: না থাকা উচিত: role, roles প্রপার্টি বা কলাম না থাকা উচিত: roles() মেথড বা রিলেশন কারণ: এটি HasRoles ট্রেইটের কাজের সঙ্গে বিরোধ সৃষ্টি করে।Must not have a [permission] or [permissions] property/relation, nor a [permissions()] method
Your
Usermodel/object MUST NOT have apermissionorpermissionsproperty (or field in the database by that name), nor apermissions()method on it (nor apermissionsrelation). Those will interfere with the properties and methods and relations added by theHasPermissionstrait provided by this package (which is invoked via theHasRolestrait).আপনার User মডেল/অবজেক্টে কোনো permission বা permissions প্রপার্টি/রিলেশন থাকা যাবে না, এবং কোনো permissions() মেথডও থাকা যাবে না।
কারণ, এগুলো থাকা HasPermissions ট্রেইট দ্বারা যোগ করা প্রপার্টি, মেথড এবং রিলেশনের সঙ্গে দ্বন্দ্ব তৈরি করতে পারে। এই ট্রেইটটি HasRoles ট্রেইট ব্যবহার করে চালু করা হয়।
সারসংক্ষেপে:
User টেবিলে permissions নামের কোনো কলাম থাকবে না।
User মডেলে permissions নামের কোনো প্রপার্টি বা মেথড থাকবে না।
HasRoles/HasPermissions প্যাকেজের মেকানিজম ঠিকভাবে কাজ করবে এমনটি নিশ্চিত করতে।
আপনি চাইলে আমি একটা ছোট উদাহরণসহ দেখাতে পারি কীভাবে User মডেল ঠিকভাবে লিখতে হবে।
Best Practice
INSTEAD OF DIRECT PERMISSIONS, it is better to assign permissions to Roles, and then assign Roles to Users.
See the Roles vs Permissions section of the docs for a deeper explanation.
HOWEVER, If you have reason to directly assign individual permissions to specific users (instead of to roles which are assigned to those users), you can do that as well:
এইটা সহজভাবে বললে এভাবে বুঝতে পারো:
Laravel এর Spatie Permission প্যাকেজে দুইটা জিনিস আছে – Roles এবং Permissions।
Roles (ভূমিকা):
ধরো, তুমি একটা সিস্টেম বানাচ্ছ যেখানে তিন ধরনের ব্যবহারকারী আছে – Admin, Editor, Viewer। এগুলোকে Roles বলো।
Roles-এর সঙ্গে তুমি বিভিন্ন Permissions (যেমন, create-post, edit-post, delete-post) যুক্ত করো। তারপর তুমি শুধু Role assign করলেই user সেই Role-এর সব permissions পেয়ে যায়। এটাই Best Practice, কারণ সহজে manage করা যায়।
Direct Permissions (সরাসরি অনুমতি):
তুমি চাইলে কোনো User-কে Role assign না করে সরাসরি Permission দিতে পারো।
উদাহরণ: $user->givePermissionTo('edit-post');
এটা সাধারণত তখনই দরকার যখন কিছু ইউজারকে বিশেষভাবে আলাদা permission দিতে হয়।
সংক্ষেপে:
সাধারণভাবে: Roles ➔ Users
বিশেষ ক্ষেত্রে: Permissions ➔ Users
এটা স্পষ্টভাবে দেখানোর জন্য Spatie এর ডকুমেন্টেশনও বলছে, direct permission দেয়া সম্ভব, কিন্তু Best Practice হল Role দিয়ে manage করা।
Checking Direct Permissions
Like all permissions assigned via roles, you can check if a user has a permission by using Laravel's default
canfunction. This will also allow you to use Super-Admin features provided by Laravel's Gate:NOTE: The following
hasPermissionTo,hasAnyPermission,hasAllPermissionsfunctions do not support Super-Admin functionality. Usecan,canAnyinstead.You can check if a user has a permission:
Or you may pass an integer representing the permission id
You can check if a user has Any of an array of permissions:
...or if a user has All of an array of permissions:
You may also pass integers to lookup by permission id
ব্যবহারকারীদের সরাসরি পারমিশন দেওয়া/অপসারণ করা
কোনো ব্যবহারকারীকে পারমিশন দেওয়া:
$user->givePermissionTo('edit articles');
এটি
edit articlesপারমিশন ব্যবহারকারীকে দেয়।একাধিক পারমিশন একসাথে দেওয়া:
$user->givePermissionTo('edit articles', 'delete articles');
এখানে ব্যবহারকারীকে একসাথে
edit articlesএবংdelete articlesপারমিশন দেওয়া হয়েছে।অথবা অ্যারে ব্যবহার করে পারমিশন দেওয়া:
$user->givePermissionTo(['edit articles', 'delete articles']);
একই কাজ, শুধু অ্যারে আকারে দেওয়া হয়েছে।
কোনো পারমিশন বাতিল করা:
$user->revokePermissionTo('edit articles');
এটি ব্যবহারকারীর
edit articlesপারমিশন সরিয়ে দেয়।একসাথে বাতিল ও নতুন পারমিশন যুক্ত করা:
$user->syncPermissions(['edit articles', 'delete articles']);যুক্ত করে।
এটি ব্যবহারকারীর আগের সব সরাসরি পারমিশন মুছে দেয় এবং শুধুমাত্র এখানে দেওয়া পারমিশনগুলো

0 Comments