Rinse the basmati rice under cold water until the water runs clear. Soak the rice in water for about 30 minutes. Drain and set aside.
In a large pot, heat the vegetable oil over medium-high heat.
Add the lamb or beef cubes and cook until browned on all sides. Remove the meat and set aside.
In the same pot, add the chopped onions and sauté until golden brown, about 5-7 minutes.
Add the minced garlic and cook for another minute.
Stir in the ground cumin, ground coriander, ground black pepper, ground cayenne pepper (if using), and salt. Cook for another 2 minutes.
Add the chopped tomatoes and tomato paste. Cook until the tomatoes break down and the mixture thickens, about 5 minutes.
Return the browned meat to the pot.
Add the chopped carrot, sweet potato, cabbage, and green beans.
Pour in the beef or vegetable broth and add the bay leaf. Bring to a boil, then reduce the heat to low. Cover and simmer for about 30-40 minutes, or until the meat and vegetables are tender.
Add the drained rice to the pot, spreading it evenly over the meat and vegetables. Do not stir.
Cover the pot and cook on low heat for about 20-25 minutes, or until the rice is tender and has absorbed the liquid.
Remove the bay leaf.
Gently fluff the rice with a fork.
Garnish with chopped fresh parsley or cilantro.
Enjoy your meal!